{"_id":"@brandingbrand/fsengage","_rev":"1030-148e59fffc8ea02e9e2e95ea3f05b10f","name":"@brandingbrand/fsengage","dist-tags":{"v8":"8.8.1","10.2.x":"10.2.3","next":"10.10.0-alpha.1","canary":"11.0.1-alpha.17","v10":"10.19.1","alpha":"12.0.0-alpha.20","latest":"11.88.1"},"versions":{"0.1.0-alpha.8204c6aa":{"name":"@brandingbrand/fsengage","version":"0.1.0-alpha.8204c6aa","license":"MIT","_id":"@brandingbrand/fsengage@0.1.0-alpha.8204c6aa","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"1ca59998bdb3d67fc6dd3d40afc67a43c877391a","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.1.0-alpha.8204c6aa.tgz","fileCount":156,"integrity":"sha512-X3UC36dBjCpNoeDAEeXq8oPOYWBFZNZVJ9n6MV+8hJsiURu6Xzgm4LrtGvrpViQKS/sD3Nn4zU66nY2YWXvriA==","signatures":[{"sig":"MEQCIGFU3sSTk6mQXT3Ccl4rfxnPg3g6SZCsaxvTymp6aXUyAiBDeXL1jbK2czSkP6ZeGZSYKoZjVpVUCJgtQkjc+A1Vhw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":302764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbNsHECRA9TVsSAnZWagAAxB0QAKONdUq7HjpiXMTE0/dE\nIsjDzseecZ52/f5KtfOk4ui1sKsVlKQs6pRgk7UhCchiRgIEHzGSR0QITKdf\nVQbbyg2X+FGp5YAuKJY1f4RaxSq0oFGsXZKeC3vbwfRcTR0uMQTNtLidtyvj\nC3dx0UngYQkpta0cmFIR1vmwfxqBDN+jnDfQmR2alFub0iPEBhiqAXflFNTx\nDvYTgC0IKLhxQWYfBqmQUeo1GzyI+VhDFGiCyIpFBoYUQlbLpQfUAGkCLSPO\nQDbaKVgv8lwkHt9gLE4IuCJc0+ZZZPVF1rByflBiRTOYrflDNZ/qsErDnZWM\n/z2Krx/2lgeoLi9VjdBig7UbmIxVzRVAh3eFZIiK3W0GOBjbZsZIGzqvWsvu\nrJMavH1j0flOodFfydZAqWJ79zaGsgf5h756yj171G2PQxwhuGonru7PdnUr\n+1AgxzK8oMgWtvyZM6HTyHcZseU2m+HWng0POBswtnLRLDi074lWIWvxpEdH\n9T2dUHT0vySS5VmgSBrL3Mgc6Ndx35109oz87lNCmohuyUbDzIp9tcYr4R2p\nwz115+QhiaZnCjTprOJI3xbSzgCd7lN89mOOmErL9kOSlE2WbY2yA/iJe43/\nT/ny9tAobcxPmtXEMTVdbI55Ad5wlfuopPi1VXxi3g57rfRiRGQNzXbbjt5U\nNmQ7\r\n=Uhp1\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.5.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.1.0-alpha.8204c6aa","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.1.0-alpha.8204c6aa","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.1.0-alpha.8204c6aa_1530315203602_0.007106165798814068","host":"s3://npm-registry-packages"}},"0.1.0":{"name":"@brandingbrand/fsengage","version":"0.1.0","license":"MIT","_id":"@brandingbrand/fsengage@0.1.0","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"9510c0ebcde6d92970bb5770761f89e7678e6bba","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.1.0.tgz","fileCount":156,"integrity":"sha512-YdCBAp3OiiZxnJoyECVzhXzH/6FUvOMlzZxl7bmpr5ZtaJx39BsfWhQ59t07alLmQvlAYRc1CGK9iEQHaqgB5g==","signatures":[{"sig":"MEUCIF57iuU5bD5z/Izs34qiMvEkIZdehKCo76UzgOfc69EiAiEA0Ak9LXv6VBUbIYSMWE+uiGLyp3enO91mj5IjzGJ9clE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":302689,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbNsNOCRA9TVsSAnZWagAAj38P/3INQ6pDgtdpwbXsihNB\nVuZrXjxYHTxu7nqDXs0Vg7r8j9Pwep29dKh8oemUlu2L3O4j2ImyfcuzkbIg\n4ll3avUONqCN49OGzSZAgeLUpA8sR3LBkxlcqs6wMivQhhLnG1y0AHcnXmwl\nU2KsuHOI82QmOw0BgecWjIy9qU7IV24GiFLopsuDQLIZ0axGgIKMdIA+MKaU\nmL7UWo+6tiRTjipQpc0qWEEsEZvN2z0IyGvIu5RmfCsc0FDCfYcs0L9bSDfy\nlNPD86k5XV8ER4L59S28Z2LlSnimiSinXFtC+4GjttA6OSmDQsFZt2QdcEWS\n8/okjxAKCtte90jYF/AQnq3BnTuKqHBPLgTm8JEYaHZaMnqLKUg0m5JoGnun\nY08H3TzQXBSVYlFKFcKDEoKF7WvI3BD2xp1KpU5/jf//khB1IVUcY/RCvNZX\nsnIpT/huxkGuIaa1UfgApexWa8wHpAIkflsg9XuK2YiTsJDnlh0CRlTSqwjx\nJn66ir0aoWcsZbWz6yfE7diVmRboo2HHeNW49DlisS91Tb2wBdyNs/0DBUZl\nUpXZO5jn7kS3rv+0E+yhVvXyOghXRi80qWELvzu8stJytUNnYRScZ1Y36tVJ\nUZKa/GrXKC/dmhwskHEsDim/QSg76YK+PN+ELPtWl97Pg1UvkuSGftOthWFn\nDlyn\r\n=JSNR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.5.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"^0.1.0","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"^0.1.0","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.1.0_1530315598514_0.0334111188811661","host":"s3://npm-registry-packages"}},"0.2.0-alpha.039a84f6":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.039a84f6","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.039a84f6","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"010364f7c6385f7cf2bc61629f0d3fd95fa6f082","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.039a84f6.tgz","fileCount":156,"integrity":"sha512-f7LJqurLSpNVh7OoRi/qPPrI4cjixN+lijOghnuGtkqw8WYildWYZoXvD4KX/0HbRne4kHV+Z3as7+cXQD15EA==","signatures":[{"sig":"MEYCIQDQIMrK3qW3/dhzz+832fseuUPNs0QXlgTLgY1aGstIigIhAKYPXnV46WIQuqduk3eBDqxGJmWeBt41wpLCR/ryDSZY","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":302764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbNsg+CRA9TVsSAnZWagAALOoP/RxqPef9P1hR4DT7Bhf2\ny3JUrrEYlvMF7HInA2+1Ki+2JzHR+799GmyEHIn/32uz4iAb6UAD5PjlUYEE\n6jJIN68bI9hhgvDYC6Z7qJkn6qOi5NgE9ogcAT0EfTW60M58B+Qzut+LxfJY\nQHXm06YgOHVyhTHhuYmlh3djS0BJCHJ4rE9xz3DumOAxgAaTPtqef/E+TLlZ\nuE5g8qOFR2DM7mrONUxQnTmgnkLCbrCOUhWS6BWfdOyxUw6MZCP2JUdB7alz\nDc25oqgRxn7VGJLMeftXnHhuIzd9ri3LXgdeYXrnx5rMm7UFhXN2o36gWFGO\nPrg9YzIyasZ6NKHPC8Y4aGUnjYgcCp5hO1in+IStjzQLvhx8KbRlUKJrZZBu\nSF4IuPL+TBdgKtCR6J+NeS6dq0UM1+I5IrspH8+yMrBa+N7Fb0VWcZrOCVer\nwwUz0Q45kg49q7HOqNqlTwf21WEidyd3ikCK9UHcMaVOj5Lf0/obBCGCKqLA\nVsW64cly2FBp2R63bnqvtsqAds11x8CPl2ADzGIDCGsYsSgfxh9cYPJihLp/\nYqNoI/7RmEE9C0pN4Uo4O6tZswqIrg5IfAd7A7t4p/W+qnczRz5g4Dc9ajan\niH5pSVaBKMAo2rmQuh/SynFSu5OHrmcgTf9U7Q4mTvwSrqCKFqT3W/Cu/YOB\nplBQ\r\n=4HnZ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.5.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.039a84f6","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.039a84f6","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.039a84f6_1530316862472_0.9227395981484747","host":"s3://npm-registry-packages"}},"0.2.0-alpha.01da8a20":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.01da8a20","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.01da8a20","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"59fd9b4ea80d7a579ed87c02e6721b7cea93d285","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.01da8a20.tgz","fileCount":156,"integrity":"sha512-4xQI4T360pY3DqXsymMr982EUWvom/eQlgA09uLrwOTXv8f+lQPBtXhmnmzoZVyJLjrrdYGSwrkI0hdyadAdbg==","signatures":[{"sig":"MEUCIQCSRnxwhjDNxFFtEoeJROaxKeAp6am+kR7lCx+kgZ9kMQIgdDzhqNFExonSUm0dJolsIKLa/02DI3ltkOOB+5dv2Jc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":302764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbN5FrCRA9TVsSAnZWagAAFocQAI4DJrqQfUq76aMXuq+9\nDDS5pSITHldkOvXeYtX0Nsyf03fk3XN99QPipYlVzsolRkR+e3Djm9ENvM3C\nSPw/XzGcK2SyeLdcZbyMKfZ5cnRzcG4c2vh6F4wZ6p97y2EEtp62iUEW36Rq\nPW3s0zf13U+FjYh+pywo05caplDInBBGpAcJpe4SDk80wxWj0ZdtJQhkg07Z\nv1QCLE/DTG9I0uBhRaLMvSSX5efVFu4LqMVOPkD0OKU5eKegj7vVz3WED7JQ\n/tglA1YgM0LFISAgo56bzKuaVkoRE1cjd9Js+2ZItZRUhWlBEpRWCNHn6J6k\nbuL/d0OOPBoaX45LQTmmTKGYdZ76JARwr+JS8N8bWwpFGlubLbZuTk3UEug2\ncCehE5MQDfh9AZ81ak+EmV73WP+jn8bYlS8pHlvn3ErbCgoK9QbBErdNg9S9\nHlR1AQMF9UxTrY+Nkb8NTkUPA6I0IuQTethmhW0vviaAvrRL6G9qoSl3BHA3\n4lkOaWksruq1StaYlV7tTs6YVTbumSIrkxyDQWAmNHTN8CwsnjRFP1HNqkcX\ndOkN4dIA3Eb3XjqjM6SD0+t9pTP1YJv8F6UQdWoqwG2IAZAugK0i7EpuZBzK\ndkmfdiyzeh244LUOYDjFjcN4xUJHIU4oFA7nsH5O9r6RTJsAU/z6i4LW2h6v\n/+87\r\n=kesT\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.5.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.01da8a20","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.01da8a20","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.01da8a20_1530368363318_0.5287368773974748","host":"s3://npm-registry-packages"}},"0.2.0-alpha.0df49d9f":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.0df49d9f","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.0df49d9f","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"f6f54aabf9206f553bd41cd3e2a5add1cbe1fd47","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.0df49d9f.tgz","fileCount":156,"integrity":"sha512-NVhnT9XxjuOWcPMNkxfGZrOHDp8F/b9VFBjGvpik2vThWTN/iGqCkH4pJ6mfxRrWCe6wz+r4uVLFSsdcQeYkXQ==","signatures":[{"sig":"MEQCIH8PVswIcGOiCaF+91DAucYGg9oCDhLpHXTVNu7h/B5bAiBXY6i0p/vOV+x3Wuxw/ifvMS8gkSI51g4dhhCrfFr24A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":302764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbN5IkCRA9TVsSAnZWagAAGkoP/jcsEvbdyz7RMj1QVxN4\nqrmMHRLSkOJQtcicNcRA4ZMp7FOxyWu5bCOWQ2CBkip50fkHs/3Hl/gbyFFX\ngqnJMIGAbRwIi1fiqYbGGg75cahnxvnC27Sgg/dMFGdNhtyZN96Jz+Oj5oNf\nzGptoaMEGcbLDKBRxkkbGu8HEeZrLvkLwnvuvzRdU/ydQio+vRC85shziYgc\nbvb2a+uEyDQHKaeCYtn8FP44l7BKcU119+y0qg9sC39YVklvUff9/Zq+9wXi\nJO7skLhjlrXEWigQ6p4nDMp5yz+GTxdYy7hpulzMvqGMgUIoEKSBYVAKT/QN\nvUdnwVmQRjuCPKyMXAxeUyFe8YYW6N2Oy3zRe2DYv2EPfmlNPkj7yx9YG8ap\nL/YxiPN6WWNxjSdfUiwk1FTCN1fQdTFisUOuvYSsXhfN6Mxl1QyT0wVu8z/S\n1R5quBxlcniKpofxvnSNNo6S6Nub5oJyTSlWZ5DDy/72zKUcXObqE5IZ4ASQ\n1eeuQPu14qGGCunuTUUPka+Ev3fSGEWHHt8qINgPolesIqCAHMx3KJRzJZnD\nFDhy/kOdoPAWZkf6szmsc56um1EAGLEzPBWOJUSKby3BNBVamMVY230TbiSl\nLk4Kq94VbQ9Fwm6o7u1PDqbglAIWGamhCr1wvc9JGRsC+KIeTZ6dGCaROqPW\nYYuk\r\n=xtTK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.5.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.0df49d9f","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.0df49d9f","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.0df49d9f_1530368548511_0.6584557047237856","host":"s3://npm-registry-packages"}},"0.2.0-alpha.eec415ab":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.eec415ab","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.eec415ab","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"e20c639de011611c19391897569ffa5a036e3ddf","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.eec415ab.tgz","fileCount":156,"integrity":"sha512-J5OReQXMqWQBcOc8yomq05bSl6Jm2o1quwu257EQQN29R7z0r6SY03uAfbm0JiUHNXSjatoGbvr8+F5HGX1rPg==","signatures":[{"sig":"MEUCIQD0uzPlur026LI/webx5Rt115x+hDRZi3zADow5ol2FgQIgJMhefO3ix2/hIeUKN4lL/OcEpLvNp/WGYZT8J4Iub+c=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":302764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbOh9DCRA9TVsSAnZWagAAO0wP/3Mr9a9NIP8F6eppOSwm\nkmzxVx1YVw9w/fXAmV3pduph+4cOhTnky8ZEsfnuSqAarF1qmqc9pfbXLWVk\nWFpb7HfmMniuLAAaBWMc2zLV+RnaDjM5GNB4lhGooE3d4MJ/Tv0Cn6YxcIU1\njuLeAgqhHT2eZyg/zVYrbUkw8w9/5Mng9yIYph0lgvgebS46iPpr9ZeCv0hI\n1Z1PmUUrdX1TLZpb57GSkUzXf6KnHPDm8hW5ocivEQbPeaQpXcDzqAkdBD4f\nBlY8htwVGjV1PjYn+9Bybero+P0BIIGzZyZFRLHudLAc7sAJBK7sLdW0eufL\neV9vea19TzuoXWL8R2YAXsqa2qgSndGWNZJfarZHFW2EoBr7npnGpqdyIUdE\nBmHzQUAdL0VOzGD8Y1jD94sweOY1xVqYBwqYXGkrpW0yy2UQ5IiGZYIc/lQp\nq+tUZR1EJTn98jOLPcEbB0DJxW/Ax1/DZqQxlIEvM3hEouR+sGeKO9dA95tq\nyzHTo0slN7qE7rxP7bT+imA1UqgyhzKQXeW2hz5/OFApIJKOLyOviUGJaB/w\nH2J+cnXH+0Yge2VaF/uxxLXEohPUKOJ7tnMECFHh6+t+vSC7DmzooJwbsTq6\nih/Yv4lDaKs41u/Bigy/mrhJHwMOzJ+XG1WDqYbI/GQepWGuEQ0UXstarKYd\n1QjJ\r\n=USSZ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.5.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.eec415ab","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.eec415ab","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.eec415ab_1530535747660_0.7430570862198518","host":"s3://npm-registry-packages"}},"0.2.0-alpha.b606797b":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.b606797b","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.b606797b","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"fd4d0e5f6eca2351408161ad007c70391dafab52","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.b606797b.tgz","fileCount":156,"integrity":"sha512-qF+nl8JkK5UMc614vii2nWsIqAeUhAmPy8DqXXY2chBo1OFUZ3Ie0PVRbqskTgv/vQuhSA+xJYBmNOPm3RqvLA==","signatures":[{"sig":"MEUCIQC5oWIgXpoMpL4HMprLGDjH9ECt9QLslHJUKHl+mOY2zQIgZpfJqT2lDdGtakeWYsfE/iZOWgJpt0501PfSQyMLRvY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":302764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbOlMSCRA9TVsSAnZWagAAK6YP/j0WleO+YMuMlCMV34uH\nN2tLRVU+njNZjGEvRKSDbZhOqTXo7/jsOgVMgc3/6iJrhywOs7gEAQwwfsj1\ngKdAf1sMSFOnRgvl1TysL24uqkvshgQDRDFCGk1pzeItzwuCNanP6G1dHEoj\nRPEZUzOYkMw1PAqqitbaGrbFNzVmDU1YIHB7E7ribQlQGpcvPfxSS0XPCo6u\nbgo/PnSpQhooHMcZtcO8lPOoPyaPmOKxidG/jbs/x/3OeChVyGgPPBXefzL1\nDTlaAOSkhJBXdr/89fnvXBQju0TUqzDDhA+Oo2y9acOlw0K8Q//EouZEhDGl\nxc+tzbPl5ayh0qddu2pfEawj+ji1Z1OiR0Ezq5ZxDtNDnhTgU5MYE+Z5Z82r\nzx3XnUcgprPhcTMEsHbFlV3UJsu36LFzC9Z/jiIs3Fk0Rx7+1YFh8jwJTRu/\nh/eENskoQR2OTuPG9NAmR8EvM3M/1Abekh4KS5H9P9p84RXrJxFSLe8weTey\n8cpI/O5pDCpiyxbpQ4veOZXOF0Wx5FbSSd6sD76V2cgOof/YUkjm5ooElF7E\nll7j9wAEQxHc2qonFAi/8Ba26kgP4xJoiDo1bpVvtIVd0bBexMv87ccGPfmR\nKevHsA/ld8MPWTXvWa4fZ+NqpwAWG+1kRd2P2xqLYlCUBRbAYm5xNBNe4Dsm\npylj\r\n=elvO\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.5.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.b606797b","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.b606797b","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.b606797b_1530549010284_0.3082829723304519","host":"s3://npm-registry-packages"}},"0.2.0-alpha.fad0a274":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.fad0a274","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.fad0a274","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"c8d4fbc081d4f16411835a7d4449128ddd942572","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.fad0a274.tgz","fileCount":156,"integrity":"sha512-PkVZekzK+TeallUR2G3Tmd0cFqrajQG+p8LkkuV8wjQdgcljW3x8SOMx9PoJBJZ4XbvSIG8wcBKx3jPs2gXUOw==","signatures":[{"sig":"MEYCIQD7NVcLvs23y9rFQY5G3gdf/LxOxaYZJC3ogPrD/UnuGwIhAKWOPzlaoQMVvxIWRGJ3T8l9BWB6hBsDRc2HWrNM1W7i","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":302764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbOmGZCRA9TVsSAnZWagAA8FwP/2xmTWskWEfzUACsx2Av\ntVnI2Pvq+2QCWY/ReZp/Bdi34gFMAPH4us/aX2yn+ars6txjijCBZnv3/5B1\nhDdtepW64vLfqpfoz7WXfFIQX5jdyLOsZyn/unLRT6RdtbdIO638dWPdRJQf\nBTbawV8RqtaXR9iGapFGzoeAETAp/y/ncPzKZyClhj+UR3+1sU6UNlU4nli8\nYkumMxmk/+OOwlwieQBINMryMtMkjEuGDUVpjhEQeYP7KrKmFo9TEDMV52cS\nWnKTeE2LaQrR7qtB15zUpHERsRdVeQBfnk4qcbL1QzZ2CrGgk8lXvmYZzIE0\neGBb6yIkkMfD30djKqmBk/+cI9QfvlrX0BeckmV2o4CP9B68i4fVEcS3wb3n\n0PWiqcSMLDj7ZsrRNEizkRiIDcQkL2wV3vzYB8VxIElhV85G49IVm/UWznEX\nhQ0QBR7q6Kpubq/ecKSttkvEFSaulDTk1es1I/xLg1ZXgmhnl700tzbIyGbj\n6lhisa71yoyUN9BL4Auuvd93SjJm+sBCSHMeeTGgxoYz9GwIRjyMCICK3fA8\nEGGvf1n1IxiHGEP5mWEyJL7CYcfmWH8kZBDqxDujEqH9vn66WQRXntGepS/g\nIXESsoR0YWKmLZG+a12qcEp6acD2ZRRjdnEq5ZwXXU2SeWUMVPZU+Mg9ar7Z\nN9/r\r\n=OYOa\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.5.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.fad0a274","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.fad0a274","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.fad0a274_1530552729581_0.5364268444323561","host":"s3://npm-registry-packages"}},"0.2.0-alpha.9a00966c":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.9a00966c","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.9a00966c","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"06495bc72e7fef407ada7d77fab5a1efac9ee65a","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.9a00966c.tgz","fileCount":156,"integrity":"sha512-8mgOl4N+SdCUskxflxjcd+nIKXCnGrrVcRYMYvpwrt4Mj0FC8DXf/ofhygqVSKgJAZacUqU5uCdSee6Q85wJnA==","signatures":[{"sig":"MEUCIGTqNiQ9qBBiJt9LfqLB65HJh6C9dzQ3C0GT9yEYzodyAiEAy2PR4cSTDsNHKwR5DxjDjdT82A37/dPTcgy2OlAw9qE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":302764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbOmTGCRA9TVsSAnZWagAAzQMP/jAa1yLnCiCJ0Iys95js\nbP7pvyVyo76UPmRRfvhsq0zfKj/oHgFKmNzCuS0UmapToQQln3ibclzLv+oM\nzrakKfxiXmrDcE0AHa/m4yVfdMIlMjWTJv2z3JjXuk1uF0HN5VdOIpMLkLqt\n3JeFb7N0IWAtqN474AEEvrJscqHeeNw0DNHri3TD9iokx4q+SEZCSMgjqhen\nAW8xINJ7NSAd2CDJqTCTieUio9eK+WXDqwFfoV8WO41Qjd9cWGDC6+A8sc+d\nztcFSA67HPEhe0Gq1fzWrjVxsvr3Woj8h3g1I76VvZgo8HozLaa0AKTiAWvN\nbMLMHdWhFYYQazzzZxc1tAjfUYfXS5TeoYtX/A4gYMS0TKUpOTwWKg8AUQDP\n8cnhytxM3HAxRGF//FLTSFAW88ARhyb10BgANiunjCyTqfqfHDAo+Udrw2dn\nOq9isqo7zNeftH/CUcFVG49hceZGtjUdKt2GESkONRgVDUb2vkmVoX3Z0WGy\nyKwpDl8d11cht36wQMrTRGmqD/nwoMkVamZHyMij6o+AjqKMQXwzis7M6bF2\nlHmCs1mOxGwagifTnewHZ91qvZ3gG0zpTLKoVfqQTKi75MJ9wtekjyJInyra\nCmUXWvk1YNb8kkbVeQYpZq41b/ROi7m5vF2n3yb1LAc87BjXMIA5GCCgndIV\n90yL\r\n=Z5ni\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.5.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.9a00966c","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.9a00966c","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.9a00966c_1530553542702_0.5941004899215154","host":"s3://npm-registry-packages"}},"0.2.0-alpha.159c4a6b":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.159c4a6b","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.159c4a6b","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"e2321266dc9b4a7d0e709ce9c2754d875ce02e47","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.159c4a6b.tgz","fileCount":156,"integrity":"sha512-+5N+dVkpR0M4a0QrS0usvlDhUI434z49UL0gpaHOw+pMMDpbeZ5PcT0Py5imU6m0af30o89rgWbh/T8VKvyO5g==","signatures":[{"sig":"MEQCIGrFqxGYnSDosL7PVml3lt8JMw4NemOKzEF7IiRTEtXnAiBsYBPYxUVHsFtmcoJ6xw4Pq2Ns25F2pLCS5fi75z65QQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":302764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbOm13CRA9TVsSAnZWagAACM0P/0TXC0tUfl/WIAF9oLne\nyeCvEmOC/qks1c0Dsgvt3MeRmfyBFcV/TcXe/y8cI6oygo2JZFarMk0TQyhL\nf/06lTx2iVY14zJLSEcvt8SJSzao3TOPwFraKzg+dHCTNxpeyudUHBfmyfPa\nRL1/HFpwk5RaovFF/yktWCJjok7d5MvabS+ekgTSGnYDSMpRUggBMXIK8q8h\nkB9U04YmODDFUw1kS1wMUGeuJk/jDQEv6Rz/0lBPDATaX9T+TOQyB4zF5cJh\nZmuP2GJgd86g1ju2BRsQLDqMadApbJF0sOQejOc3u465L/KHErE6ZgPjrpD6\n4mhv22ybbImWDml/2gNgmiS0Agj+EcwrsrlSXg1P3t6bKzWSpkQI2uheZck5\nqA2stSFJGx8wYGYPxbswby/B6n6o1ODcUaj7zn1T1MRz2UkNAAzN6UgphFnz\n758wVIm89Jz0oqVVTg8mpHDuzmoqj74zjYWhUFaPUyF1NO6ZoJg+vVuiX6A5\n0SoaDkIskvoLmcGtXTVLcgIODV5/uLOxSYSA7d2z2HkZRIQso7pR5zQye6Jp\nW9JydmeV8sRN+gMv1fnNKft1zwHo+2sXRg3ojCpMkXqhjtvI4X3bQuydYceP\nN1kKxwWsm9jmd6zQaGVQv8E1gHsTsV1FtsM4XEznHFQ7LJupRmon9IuVDCn/\nUdI/\r\n=sOop\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.5.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.159c4a6b","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.159c4a6b","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.159c4a6b_1530555767316_0.6824312788873834","host":"s3://npm-registry-packages"}},"0.2.0-alpha.331c05e7":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.331c05e7","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.331c05e7","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"05a8202bf4be85e63152915d7bf22048dcb80778","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.331c05e7.tgz","fileCount":156,"integrity":"sha512-OzuPvg2yzRgEJIuXo98j4RRO+ARU/5mSQX0N8dNHQd4nOXv0TyqZLrC4hx3Yw1ltFNMQJq2QVkX+insUHQ5lCw==","signatures":[{"sig":"MEYCIQCvXsBqwzG93sHTX0DVOnWWcYtsExh52BdIRPCMKbI+cAIhAOwrJ1/KTVWyJKTFheirRbsSklwdJ/BW5E0InvNknM87","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":302764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbOnCrCRA9TVsSAnZWagAA6GoP/RMZt0OtKHkgOapeCPwx\nkHiHsaQPWTXaYIRzKGn1Pq12d2ROHODL2Bm+A+CKqFZl9FEj7fzD92tbtP4r\ni52VdEKvdBh1lBIh1+s4xMv0ZGUer9UDmrOjRX7tcAtZQaZGgRGdlJpQm96r\nMYIzt0+rC2iI95/Vrfe2KYDp46wZW4q/2W7yzCshinHAwPqVFT5JuwKNVl0X\nT+YgPyNZG0FVcX2g+O/Dba9Kt+4ILIE+kypqCPsUrYhvDvmJdu4YOt0pXC3M\nUipx6Mv3LRAWLNSc+7cU043wy2kmCFya2NrqjI3rSurgbyMy5LSS68d1TR5c\nOEA+kDIbfY334tAdCOUH9NLVvtwwGO0rxrr1CtMKxa49IgKrIGSHyK+7eyrj\nhXntOG+VpG9tke+URrlB3T/fvdaXxdHBqKl6wt0whDNG3EpHXjSXgjbooYie\nhOLnaQm4TnpIUchqDy2xNcMBIAVnvAifGFPQtJNYOR4C9o9yjuD39ezHfhe5\nXZki/eDALSJbEuM4hz3HEloeT31Xq1P2/94CMPeJgfMoVHKasLuWnw30b4eq\n9to/OZj6NmttLmS3I2TSu5zw76PcvnkvNcugFLaPo9KOuSbUL3YPkLAMiRsu\ngJPiEOpdBAiUOA7bNrxkuW/5EazlN3ZpADNW4Scbyqo3BgCd+LJgVOlFL2Hl\nNA1v\r\n=elxg\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.5.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.331c05e7","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.331c05e7","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.331c05e7_1530556587426_0.5592681833941795","host":"s3://npm-registry-packages"}},"0.2.0-alpha.1c6ddbdd":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.1c6ddbdd","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.1c6ddbdd","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"55f8f9cf621a3e698fc6594bffe766f30718b912","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.1c6ddbdd.tgz","fileCount":156,"integrity":"sha512-s8SnujBZzVDh9yY6D+600QVF6Al4DxeRrPJra1YFCXrn5eMhzDKylFbLkJkJyMY7pd+5/1wuvF46VDdxqTh4xA==","signatures":[{"sig":"MEYCIQCmvunxLrKOEzf7xvCVHaaz5SUDHHz9DDlmB9FDDJkVJAIhAPH2I9/lByFBxpoiaidwfHTPRnLZMBmOqZumotXQ+lqI","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":302764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbOo9WCRA9TVsSAnZWagAAnFkP/i9rRfuR2/4XeZ3NUQJD\np6mj5DgdfH/fYDv13516X4kZJAvO1MD8Q+ZFPxWFeyrmJlGzF/1C+oLGwcmF\nHtE36Oe0nVQQ66i42ayP9LiW6LZogyq/CMfrWKJYrgk476vJlgkOPSGm9v3L\n/f1tKSR2/wZ+Ae+JQ8hX3WbpvmBr229bbRLbIILFzZlp1bFgWH/0Dylm2xV4\niNkeQeLC69/yEUKIsz/tcnqf5GlcEoDuLieZ24clCqDeCCS3xoRDTkm1pTfU\n13pUxRl/VX1RtBjCR6YoRHo01gTyMwM54n64lHwJx0ogFi2ast1v9TfGiIvC\nbaEKv+G4G/0kDZiwX4UdqfdhaJ1M7C+zVVzi3xyo6kYBiD71+8+JOJTLe9cq\nBnYvxlwnrvYdFiDwY6YMxyWPmwiiKzsg3srfXNdF7SsOwGlOzjYxvCKYxIge\nlngemwn5E48M85xL2MC+D7VkI9SoZb0W8p542DIOdRpkG5cuyu71Ez8ACBn9\nq6FM3LXHhJbtlthEJCe2N1LX/D2p8oHBAVp23NE0KZxl8y0pFg6oAxK4KfFY\nSTzf2vBwrsk2zif0kWRG7wsghA/1XCQLoGT7N4jhXATWYGqzaJS9S9G7hJpM\nTzh7FQP6WewBalAelNW3vxpR30VWJq2JZ4xbU9UGuomJQbUWtCuVDu8NRHTo\nPYeR\r\n=rrP9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.5.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.1c6ddbdd","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.1c6ddbdd","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.1c6ddbdd_1530564438307_0.5400153384546851","host":"s3://npm-registry-packages"}},"0.2.0-alpha.02b91410":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.02b91410","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.02b91410","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"e3f3f36b2a4b18addbafb70a331bd1f9c747b45a","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.02b91410.tgz","fileCount":156,"integrity":"sha512-qRXSs3ZXuPpweapbwnEsQyyfspXxKAXC0ct4Ydz5eg0AaOL9DP+cc30CWKyiNla+3I1Btsrn3H7k8E+09bTNTA==","signatures":[{"sig":"MEUCIC8vJn1PfT5nbX+mhIhYxNHdEFyJjBbO+Y0uNHTrAOAZAiEA5OT5YN8a4N10WVqm6ovJCWwCYYQiDs7BsQmZnWFHaFE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":302764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbOposCRA9TVsSAnZWagAAlNIP/iXQWJ2W9MjwFfmesTRn\nDDxqWOKsHFFyVTDxkzAvNpvum8zqZOEFDETbqMVQpeSKpbzCYm5AgezAwvin\n3P0FOe850JNHOmg1mClLZnrAHOh3W3obqkdunMpSWjCySjiEtsuuR4pQl9gL\nyESR+gegH+D3ancaEqE2kPdD6kCVROrwC2dJ/ZO/pmV8zPiztlX4GXkcSPMc\nviadPLigBR+VWSGh8bx2xjtbOxziEFJ/sRLf0C9e1uCBFQAwrAC+8iyZ6wQg\ncaE6SwEaBjUBpoirOT2AY9Tnioe9VXCy7Kp4gPkA9KuxpC+/h06zCUqdN/rJ\nckDCeQTxNpOOY7qlC2rQzpFSlS2Rlm45UqdIKClTzZKxT8PBzQ7Uo8z+4OxV\npWL7vowhgociow8Daji2fj7/AEsmToE5VWPWGVZUDTfUckcuV+0qfiyi3fH8\nnYpg8Sg5HAmR1eb6wQejS47wo3mMtKnzfJRk7teL6VqT9UMAALBSd5Hzaq7e\nggza2NXKfO1wJukP5Z1Hyg5z+EWWw6aNObNCyplZSNFWrj+X7gTcLaYYysCH\nOnL4EdxNOdpVmHWTaqAqZ0LO1fkSgt4x4zEeQ8TcX0fWXwsNC0yj4O3Vngwq\nywfEyIjz2/rlj7s/pin1FGoJEt8Gx8TTVooxlMPLs+77NDjiqRtlI/h8o9Im\nTO7c\r\n=ojEJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.5.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.02b91410","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.02b91410","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.02b91410_1530567212199_0.16007789196841027","host":"s3://npm-registry-packages"}},"0.2.0-alpha.e8c61611":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.e8c61611","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.e8c61611","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"d897d613733d0ac2c1dba42342c06a00953019ac","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.e8c61611.tgz","fileCount":156,"integrity":"sha512-lm6gDFx4Cv2JAzpTSyYKBhm0WrL307PnK8u2wgJ3iB5o3ZwUNdIV3ElZvlw/VRXV+q4eYNNaMa16YLMcJo6ZFg==","signatures":[{"sig":"MEUCIQCAYhKGRStB2CGHDW4zDIgvixp0Pls/hD/QwDW8udKR7AIgB/YRzFNfJxwKz+a6KhEn8N+8PxJFb90rrlUXB3Z9hvY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":302764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbOqihCRA9TVsSAnZWagAAy7YQAJu+t1VGC15KNeuEOqX3\n8vosKVsxYJAGs83ZymkD+ywrDT455Q4fCmRrW0OuB02NmRa5AsJOCkDLC5zj\naRfe9iP2U+LIhMzM1InN8gRQ8TQChQ3ZKsn2aGm96Jqi9sw14qx2ex11rdS3\nnKVypD8+kMAAQMr26mtIt/twf5Fw5ucd1IPcR8EVNmS6WxG+dMZ/dUPd9iQY\n/15c3/m53+XzhOzJ3KSnVTKCtYDXYQvAnttTV1gLF7SeLkr+3zztdJ2v8sry\n+Hq53CPt4XY91llbdYERAd/+KV9D9/exx/amS31WzzbaUinjERgNS/jMQ8Zm\nt+ERcz/ThonsOFoRvtYA2jNd0cfuKvFHjs6aeYQuT6lLAHUULZu8COuNYo84\nyssMGnjyV/WGkq5IqLplJOVGAqzTZNAIBNoRXVIYkG7Abq2akK+zWlNKo33y\nZUXVGZTyO2zHBDpuMWGb4sUyrWE4tWUhUWO3ouNDozqAmwcPOJh/XGwgn9mh\nI2VACR2quqCnACH9QcX7isIULq5UPl0JPFIP9cXqINWlVZC8wAO3doa41lCh\n1yiRsHaiQOnpUFjyKwEOOisDyGOe628YEeemyRWS1ad4orCDDAyi0dCCYB/d\nFxPgOMzIsXD8fY7s3Nx242c2yDP65Nhr20ThsFh/pqfW3ttVO8iLh8UIJENJ\n/Qem\r\n=SIdc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.5.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.e8c61611","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.e8c61611","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.e8c61611_1530570913520_0.0436946331322392","host":"s3://npm-registry-packages"}},"0.2.0-alpha.6db4b83c":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.6db4b83c","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.6db4b83c","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"20dae460acfd030bfdfab59f9a6c5bfd70c04b19","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.6db4b83c.tgz","fileCount":156,"integrity":"sha512-sJTd8qjiCtJ1oGWRZiabb7d9NQ0NCzfYoNgKMCARbAPrWESthuOfSv9qDsYRo/Jj2YYgBEvz4YWA4Jc8H3VjHQ==","signatures":[{"sig":"MEYCIQCCej6zWWqtz5ZO/xjYQwosPS4N34XAqFOCtTAyY7w7zQIhAI7oXUyTY8b9Pi+iesDcYKDn8dVw3CEvLs4t4ja3IlR/","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":302764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbO4fMCRA9TVsSAnZWagAALf0P/2/AqkswZUkDIUU/47YT\nWMHfXxDv9zkZqpyDW8Ik7ryd3H4ctjquHacFvshfR7j8JxMYjICSnsO2aTHY\nKMPr7mVHAxvK5rceqgE5TdI2It/IIK7YQwRgXJMAtaauu0PJK9aSdTC1skEE\nCuBgo9mjIiAJFWHUlAO5ZFbefpicTEwEnHKBTFCg1pE4YvbkbZEHYoldJir0\nF+f7/9RmSgfBOvKAGZTVlpskAf/y2J/KJH0fHilu2UQhZOWhx9tgcp4e3HUu\nj5OwrMs/tMPwFToj2gbJWbuz3qwl9nYaXIznM574K1b8CquGkubPtdkwk6Dv\naauqZHyx/5IdI591FZbL6q3nCaUmipQ7zgucEs97Sn+YW+9JQxvSSrRgJW+W\nIyktDhrHt3jV8RILWmK9yp81RdmiHnlgkksNd288DnBy78NMqS9xXUYa0p1n\nuPSPIFXzVMEKDpfI+WdzQCUkJMhMRQMwfW2Xqjw/fwjiDrPWhg34PTisq8cf\nVPbGcECAwYFIVuZlNVD0+SPO2tgyDsnC+4ycz6/9WaZHZ6kFUCbi+k7I0F2r\nyVVLxKyfJ9oi7waelJlerM5NwVjUwk4GWYxbK3D22VM33uhBtFngOZcESNif\n4hgXRv2tlFBmgT0jpt4IvrAS0Jn+ByCSBRg4Yd1dxMjqx2+IXXRjL4UWJWmL\nOaXn\r\n=TiIK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.5.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.6db4b83c","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.6db4b83c","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.6db4b83c_1530628044885_0.7323549149956523","host":"s3://npm-registry-packages"}},"0.2.0-alpha.bcdbbbc9":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.bcdbbbc9","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.bcdbbbc9","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"ae682482a8fbeea05d55b5e374a50d8db523002b","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.bcdbbbc9.tgz","fileCount":156,"integrity":"sha512-ksLv9f/I71OSwLYN2X8yQaqxJQLhOtXZnlnn2+qk+RZ2vVXQvXDtkfnt9x6shg+r0Z+EPszGOwCA620m2I1gpw==","signatures":[{"sig":"MEYCIQDrbu6wESBuSu4OC0j0iN2evwLAQoBI0asYQNRGsYJ7rgIhAMM62XdG6T/LxjPATvB4lRuFENMWfmI/DiZoz3i+G3Ja","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":302764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbO54QCRA9TVsSAnZWagAAWXYP/2xTqd031lBCUfHbOQVY\noaOsWAz/VQKghcqzV+JWrubGCeek51kXwzmH63CiCDi6PASH7kCrtrNWXwaT\nSUlEfu9YC+MzaDtgSrv5mz88Xq0B/DiQ0jhs+fiJS4+QPS7e0moEDfNjqtWu\naKbZ7eODgv1AZEdIPur15qxXyY4gSkigHJc4lrzJJP6Kfk2TPjj2feoaLo0D\nUFQiXhuNdNpHjmErg2I1B4JYncj1d0T1bmtpBVe7GIckCfyzrpWex3493PN0\n/9RMBPDagmqCx11qSxHGNtkQU+ro/lYyvGzhZvNcpzwkz9dtjqAfgAJwpo30\nfM99g26BljcimZdZY0PETYwppAZPzS2XsjdYOMuEhaf5NW9uYB12rPKKD/X7\n1wowVF1Sy9R1NGIPdhPViCWxva7hClRLebs4tK73hyIrGFtMGF+Hc7iy9FYY\noPxoNStc947V+FUP4ZUch9+UNJzVoaWd1iGkyXDrXqa6xTLAPX8JobehvcZ2\n8j3AD2GsRbE/4Yk/AiWbeCByKXkyWf932HbVLsUKUIlfj2946CIbOJIYnxh5\nDKXlMyENNQAHrmDBIcoNcq97h/fZ+oxe4j3UeyHqs3fo99ZXHCz7kjRLgl9F\nccduCrZ+aVaCVEPMFwAnpYhIM7Fnn6Gxq6N7IWxY9Mj3fmT+XCM3n3DODn4R\nE1e4\r\n=bM51\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.5.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.bcdbbbc9","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.bcdbbbc9","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.bcdbbbc9_1530633744714_0.5537029460602678","host":"s3://npm-registry-packages"}},"0.2.0-alpha.9b3f5f43":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.9b3f5f43","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.9b3f5f43","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"4c4be12261e746149879dd605e068b19f0f09c2c","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.9b3f5f43.tgz","fileCount":156,"integrity":"sha512-wrvGD8p+ECYpizQF664/FCtgY1v5EeKNl4NMX3BBjpepajuKaMvDI7iyJ/wP6Wz1z9TovIMz1xQWN5M6RCUjgw==","signatures":[{"sig":"MEYCIQDzCJcht37OKiEMYApnVLTW2uTQYTjdC44XmIEk8gGLzQIhAIorx3t08Z8wRcBwYvsbJx5H6J2gTINmD1iltFAycbWT","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":302764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbO84VCRA9TVsSAnZWagAAuC0P/3/rYdT6yANO1o/G2mdw\nKuo/VjekxMIZRHCu9wHIXa8bcNtNrI+A0ihWOJ+fti9sqYUP/CJZ1xOf9GP4\noD4aBvnEPBeUB+eoPsMkFUTWgbLK8lvWFYqJaLW9ems8+B4kwRxGYCzqlBXA\n1DnoKGGX11ENUSnuhmLNh0Pfd08G0NBvljPm2buR7ClSaiLRNkqs0FFK4H81\n7bu+3NYE9MTub2B/NmdZ7BFhenTwjRaRwL6h5KJvMy9jw3iNAC15saBQ8rdQ\nM/90c+WkR1Cx+qHslQCcRqUcBiCDEwGvcG6SJXFUcIZ71Wmf3i+bPKCx8EY2\nwQo0+PJGuvE9YVzzf3jTarxYOlUJAuNIRdPXMGCiG2Ih/cblOgp4iNJVaXK+\nrTfcWKswwcFfogCxF0e/kYnX5oaIyww390eHII94nLMYHdX6kMIdh+vipW7o\n1wolE6V69TeuORB6bvc8Z0dYBhK8zE9xNZqjmY02SaerG0MtRvVsRdyxPCk7\nqU2IiJf441N5TJQknfbtHt274h7OiyVQvygzNIARSH+aETo/eP7NEHshSzGU\nyGgCWGy1fJXP7MPMEPg2Ct+/EPlQuyq5Y9WxwymXm+tnsWE8UsnzyhgmZJ6m\nZ7oY8kuEQNbRcUmCUpAZwKvikQquRInbJ15H1X5mX0orxK9nyHrSYq5KV+lk\n7IoS\r\n=rihM\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.5.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.9b3f5f43","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.9b3f5f43","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.9b3f5f43_1530646036760_0.8074556092117218","host":"s3://npm-registry-packages"}},"0.2.0-alpha.d53bf42b":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.d53bf42b","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.d53bf42b","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"103d5e420ef1c85577e0d25b572c288cf21937c0","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.d53bf42b.tgz","fileCount":156,"integrity":"sha512-HmD+adXqpSxlrmUduz/CyL/5vCtEL9MFNWtT5fsqCOSUb0jTdyVNNbHKC5M19o5g5rFKqsS/71sFDrGtOuvKTA==","signatures":[{"sig":"MEUCIQD8ZHGoZ7NYI6ITIcQzm7kYxfBop5wgEoujccCaELsm8wIgIX2QJj51sSfZDsloySUlFYDMfSRWOZdiyGgRbEcf+Ek=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":302764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbPpIVCRA9TVsSAnZWagAAH+wP/26Hns8gcF71V9/S0x5N\nvlfGIpFORw08v2NuIq9wrG/zkQBMTl6NcrK8c2t8o5AF9QgKREihqP1ZhLCW\ngamP4pVXjWp4eb/yp+ILLCsv4v8XAfAusJsp0k64mQbwTcAE3Iv/EDxhmMyr\nNTzftq0GYEvIxotfryf/ZsnXBJkuUZsGEunci7mRx957/Di/W2AVdmeGitMe\nkVP3EZnRpB8tJPLgmeOugE93YWJGLP8bvpzAGnQrakGr5UoxjK6EpEQ/WnC1\ngFpjZ10G42cMLbciYYnObOjrS5nOk904bOdtk2tQB0i4wb0BDcMFtyVGH9nY\ntZRQk2soP2UOlYaQiFVdU+BTQWZIf6WmfjpiQSu4WgVZbja+jy4X6+w7UR9S\nF8w9LLl5gP012NePWuvpFPyyFoaShmaud5VSsmUk1AX6Wb5GBH35B6ywk9eL\nTZD+9bkI3Au6FL8sgq+PcmFXQ+9f1DrULDvJu0v8MQryXcj1s7y9qh3DzToz\nLsWk0luktwiAmM3/3yQrTqi7RWpVugb9b/8ElRLh/zhzUNWCkeMw7Rs1CYAX\nM6/ezj7dsoKEUkff/SZjkQ1TeWr03kc52ZoqtGpXNgLKwR5sLqU0b/EQb3B9\nx0rfvZB36NYMCunxajV91oYb+5Mh7zQf61OV4zf9JXgPxgy9dciU0IdRC0+m\n0lzu\r\n=Rtzo\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.6.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.d53bf42b","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.d53bf42b","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.d53bf42b_1530827285028_0.2750996513085586","host":"s3://npm-registry-packages"}},"0.2.0-alpha.0dbd965c":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.0dbd965c","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.0dbd965c","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"9a48b0aa24b0c40ac752b7a481442982c420b76c","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.0dbd965c.tgz","fileCount":156,"integrity":"sha512-6l0dTfSPEeFHj0aYa9Ui1UKNhIioxP/AsJjbwYSO0HGZ8uGUGK47DuiJK1+ExPl14aTHGTIrRX4RYTwHFqcGng==","signatures":[{"sig":"MEQCIH62ucycWqJRK4Yts9KBvHLYum0HNI2L1dUJde07XiP6AiBcn7PxC43mnt/tXIyt0yk1SInQvnTbRmzDPsXY8Vx2LA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":302764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbQ5n6CRA9TVsSAnZWagAAodYP/1OPUwSeXjSVff7wutcD\n9dcr0T60u086pVGkmLpKALHfQsjOl3oNX/NAg1SXLxzMXRHQAuiE4fW+lcSC\nA0fWmmLBjn7tevra8jdUJT68VryK57fhl1NrGwQATlFZj00NM2Du50oHtCKI\nZZzeA7ZumiO4ZFUasOmw5VYStPGNv5vsu6zAtj10Gr9N2q15Vn7tpWb9mgDE\n9Z7zjZ+O/xaswSy6v4nx97Nvws3Ad48wXqtSZnhfb0mLCKeAwBRaYaEEWxA+\nkElpYvyJdgLGu023QmaiqqlWFKeidp7D/VtbD/Hk1xt8MxV+Wo5mVMeWmEsj\noIBus+8MlPGBs93bZleg9YaRo5rgyNR8rlfBrl3Q6TwnrnGWS+MdP+omF1i4\ndUyZlNvwb7CmLPM7VOfGGR6VMk+kkBolV7vAH++NhBe0ZjV46ZhYoV+BkexX\nHLHeEWDS40dTX08ZKHfMq5epy0LQts7zPgDa/XoLiCK8nTvIvLgwmwxN11NN\nuq8lreAYf0DmpmZFurIqqZTeAtNLjr6fPlDyUlCT0Squ0xriwu7Yzo2p4GBQ\nTOIDbJrsa66owiglFdzZUr4at8rs6YHWauViwOBnkB31nlQzUGLDMRqeWgsL\nor+I+whhMPSuU/d6Y4NRFexPDQ36oqXJSQlUcU6Zr96TfzFH51CFRbpEDVBN\nk+zs\r\n=jO8K\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.6.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.0dbd965c","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.0dbd965c","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.0dbd965c_1531156986133_0.08396211522421448","host":"s3://npm-registry-packages"}},"0.2.0-alpha.8d2fa0d5":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.8d2fa0d5","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.8d2fa0d5","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"21c2b14d167146994fea706b9dfd3b50379b2f77","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.8d2fa0d5.tgz","fileCount":156,"integrity":"sha512-KcESh/I5j+RcYzca0l9xF1d2k3k3SsevWeTTkxuLfxVmoekFdrPpBF4Zfh7la137xHzHZ5rYFvdEPxDn3gFd4Q==","signatures":[{"sig":"MEUCIGQBmU2GrPUE52/tbnSBXm0Jp+qlBCZqb2bYVj0aEp4dAiEAkne3/vhqEGHS3qdetGEhxqnjHOevY2CPXAsQchwgmb4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":302764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbQ70fCRA9TVsSAnZWagAAJugP/3/4ioJS1060iencCC3K\nN6g1bCaZp8jkCIBYuHRmIO0Y095YzNLpCk68JYZaxrlpsT1Ohisr6iTGhHiK\nWCpi+ExkHbtXvSqLru8C00RIP8+SZbWOVp25nndPVuxgur3+HnH/miEETxAU\nma2fKpQU1Pe4myRddz+gDvI4lNgdaKFQJq9MuUJ4x1QH0IsKe3agcEQRfbyt\nv8hzW6UMh6PAPStJs4Tdb1ZD5W0/GzF0NUiNmZlUHxDkE2LNc7JMT6FSg6ef\nyAHv1YtLyBqIkJucH6OV63AtmmOLm3TmlBpdVkQDRa5P4hKPkSF1cElMm0Um\n6OIFF22jPsBaCbme+9+UOIwNQLYUgNhaqFUV3dufBUuy/VHlSe/NTFM4dvoA\nvJm6jHjrSKc4iBIrLeSWfjdL837XCYJ0D572ghZfw7B9Pvkrrn5DIsy/m8+K\nIjMzGZSYGJSAyCmLXC3qia+2/lgDfO3p2qHnNLQqTmcyDg5jJrdAsJZTX0OA\nFte6z00srm/FAAt7OKrRrsJAnVvHvanrOi3IHOlWQ4Qr32HW823/wnLzrDZI\nwU9HpVAeVqSAbcALMaelkIQwpBMTrhXdqQy1LINNvYMIaNoFUYElQtXvTv9A\nY80Zc1zcv5g7nBOTCI0mkpuqSoQkosJJZqaZjj16VFSg7C6zdOVW3m8hQE6l\nEd1C\r\n=TB9m\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.6.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.8d2fa0d5","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.8d2fa0d5","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.8d2fa0d5_1531165983574_0.7013154657461538","host":"s3://npm-registry-packages"}},"0.2.0-alpha.f546f315":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.f546f315","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.f546f315","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"ade4bac2a17088e8dc03429d9b0c92ae2b36cc1c","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.f546f315.tgz","fileCount":156,"integrity":"sha512-sF0vE3GISd7Eu1yZ6eRlDUYJdM9PC1rRSeRM26ULEQMH5A28o7E6liYFtgoV3FkhM4x2dVHr4VqnJkM7nNvkIg==","signatures":[{"sig":"MEUCIBJcUsJgtGz008zk51awyLPPNOPgU+6FyR5nDB0mMcDbAiEAsgMUqLakM8rbmKpWnIWHGYwUrmG7dP2fnjEFqkMS1kQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":302764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbQ8atCRA9TVsSAnZWagAAtnUP/03tB5wzo0iXiOzdhpvL\nc/8PXuuAA+iN505pc+UZE+PlwfMPH5QwloCc+wpcgbBH1iDeMtasmmTacxEo\nkgDA27dnbES3EOR24Umt8zGv09uuFFFpwvGRJgYjY4OWRnHQ97jXN28WMvOX\nDBN2L1ap6GaEBEPD+43q5AtlbDs8y+omOn95fLmbwB35C2LS+qYr5Hfd14Va\nWdorD41YcILycrihvkDx8z/ehTgVwMDCCgW6mBGj6Y3rHuqbDmX8ScaOopsV\nEnccVi6eWtN8iV1HLjpyw3J2YmY0Y0uvHJp9gybjVN8tvcTy2ujvwVL2SF6W\nZcv2vhbwMm1VqBnhXCSI8TIQ5mWV2Vh4OiZGZ1anTqI29pA6NfX255RN42xz\n9//56Mv2cI369+4xsvsryTO3+p1QvAmtaIpV2DD4uSlDQYuIhixfBBx6QCSm\nIstkIuT+/YJwyv57mmJfIMZAuKR1yZXBnl5Fubg9nVXXS1tm4n1AlFz1B4qu\n7jZEGOGyLVCYkLdFhqpYaox9N5Ooe7w5/TOojBVz2q4NkubOXDUc/Ni5uKhI\nhdZs8x/kziC9WK+Gfii33y99r2zW6yWNm+ejyablbq1C2gw4/ANQI+lTSP+3\npwh3m3jSG+g6PcNjkQDDUo8ZzpPqn1Mu8mK3s+Bss0xiAqAHBgf43P9cGa4l\n3oyi\r\n=HHI5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.6.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.f546f315","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.f546f315","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.f546f315_1531168429375_0.44853701132103563","host":"s3://npm-registry-packages"}},"0.2.0-alpha.cff15a98":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.cff15a98","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.cff15a98","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"ca60fd50caab7cb30eec0c3cfc8779097d19b399","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.cff15a98.tgz","fileCount":156,"integrity":"sha512-cwBN3FAi3M/2BRyIcdn95xQPQ57QwYmxdE28qzFFoCBjEACC553sdOVYt7wZbMAYZKU+nQSGIx8Qx/jp9aShMg==","signatures":[{"sig":"MEYCIQCM5JLimxb9DP+vDISx7zL+IG1qpGo+HyBupVm24jXlfwIhAIrEFIkEqjGkL0i0gcOe5MxGVG2UE4DaDjRL6SjKBmTs","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":302764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbRNSyCRA9TVsSAnZWagAA4WoP/1DtjQCrfi6ujxXcQSjD\njldD3xHYbdgA/wQM/5J7PBabNq9ecV+NpS5TcdsuibhYIHsMjLu9QUqe7nmN\nm6OA4TRhY+6mwvXCw66HlLnvvi/+xk3xJAl9VGpmZFWMwjh2jcTrXdQ+1uav\noghM370GgxQQfH+AJXsGlRNAuut1Jd7iBD7vNjU5INIl/IijNAkOpygJyV/u\n2DZdlvDTOyMSnElGZIMjLfvzCMtBCPBp8jNHUa0YZUzhlduIE12KPCoD9gpA\n9oFej8neIoU6b2LUXHX1CdBduiQgRZCn6qB3YpF7O899WBkD+AyGnInKLJdf\nkiq6w8+zy39OGjbzDC9uehOohHZFvGclJ3kicH5sHbTGyF0Yhmh7LKw5oNHO\nVFlv0MfmQg2q4fEzq6Jm6230R9VSNcYMiDcbUbbVmLN+jEmbSwv9vRUc06uX\nf6c4Tiwt6t8oobVMpP9M1hPDoju5nrU6j7eqs12dIE4AJuVkPKyleAB1ZmQI\nDF3Vz7ZgPv+qauLLujlh0upZ1mCkErfH7AIi0e8vHaZ/xGKz4xS3s5nKLLhH\n7s7zxgUfeyLek7twmNh+P5Q0oIsiVfAXP+++T4CPLXrc9/2KxJt9CwHw/qRd\nO+SHoUh6GEXBIsU7C0oRBI0/c7sTOpjVbVSrYl6rdxl4Iklt4FxRHspl3NXu\npxiz\r\n=v9Kd\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.6.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.cff15a98","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.cff15a98","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.cff15a98_1531237554088_0.38938907701475434","host":"s3://npm-registry-packages"}},"0.2.0-alpha.33643ce7":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.33643ce7","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.33643ce7","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"a3141b9de4a2d53fb6116b3dc2ccd4722a95fa07","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.33643ce7.tgz","fileCount":156,"integrity":"sha512-GG12xacE0wsasuRK51HQcqR9X4qMSxm9ZNGRBqaMC1w5aYhKxVaZeGVpu8jvziU9qGBWclBzNOaPGKfGyPx7yg==","signatures":[{"sig":"MEUCIH+2fl06W6qxu0r6wZTMvkAA01LU5mafvvtyHX1W0JdkAiEA/bBG/7IbbOEzGo2s522Rn6zoo6SfvjS9QcCRo4VdCso=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":302764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbROrFCRA9TVsSAnZWagAAwiUP/2D8nkxuwSod5Jjp7CIJ\noLzJBezxSHKP7pMWJ2LYvKMHUf/5/pKD7jat8d/a87L3mFepKbh0H71qDj7M\ncm/76YYbzCSujbqDuGVOHciT3ccPoggnFpaHrhB/7gxVLo+b0nUsQ/nHtqev\nwqxumENjsagsdKAIR5Ugh/DYdy4EB7Gf+6Z7rxG0/nqdy08tdNoc0HsmsV/2\nDijBTLyvX/QsUh6hl5qi5np+tPH/LVtQeaEjlTFKe5ob2q3JUW0pgryPt2Zx\nhsnlckG7w72MxfipUsHzeV1eg/5fCG+bFl/6xuU08eshp/64c7UESi5RYNqb\nK0UmW9rsKl5gM3dtSzka66WfE/fVVq97KpqpGh3wd8ysDjQ3fX1cb+ccRBuL\neqGNIDXa9R5f9jNqG/PtbyGiwlxqx+gUQggOuY9mDDgLVb1vyB+T6bGfuSD1\nHAAJd4WljGC229zi/QZaQS8h970Xl+IKCBR+Jxbo6TrbnDhnz5LG/T1AebXL\nmHx6Cs1TUXJVtMpN3/uBFga3G2jN4CaVMhRgNOfZfF58JioUzjUPsOpPUEIv\noSBjRIJzCkjum33nSxGNIvPgwObmXOyKcgJGQxd4OtLiWEUdPhOK0U3MV9wA\nNIuFFJE4aaj52pugkSKCCrn6uGYKz637iidXh/JGiFsID9J2jUzRwdJLAB46\npG97\r\n=8wih\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.6.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.33643ce7","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.33643ce7","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.33643ce7_1531243205859_0.06257947962420651","host":"s3://npm-registry-packages"}},"0.2.0-alpha.0880a1b5":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.0880a1b5","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.0880a1b5","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"63d2c5552eff3354cf5a96fe38882e2950c03a0a","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.0880a1b5.tgz","fileCount":156,"integrity":"sha512-2GPpWqDcr+yLAyLfylwkbyonDX0siHr6muuFY3RZ1cgn+SNC+mhNMDJcyyMu8HDjNQsEN4KJ+T4QJRqDkFIklQ==","signatures":[{"sig":"MEYCIQDhOr82rRjpXkk3n+BPtROhuYggUVJy5LwaEAF1ud0bkgIhALHVDXmGdmESJr9iVg6VS/W4cLEnw73baZid7cGH8xPs","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":302764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbRPFiCRA9TVsSAnZWagAArjgP/RDJzOjpVhom+9E6+ZTt\n9FgWhHULAGIqs3vYuaei2NGnIcC6eXchN8+NxOicffpfroOCN893HY858IT+\nGze/P9fEixUo+uBaTa/2IhWigW8Hiua+xCZr1SNHldTtOunqPtRBmM64VjmO\n11nuDNGE3JW0PxJpmiSOAWE645GjdJmS2aGG3L8Gm/a5Log0lwAFYSZ4j2aj\nDesDCr7CCkCtu6QlpZFNDHMry8PiKH8+WXTHg3BAxNMmiol9ITu7Ej67sZms\nTCLZJ7LOgczYIECG8DeD//I8JXK39Yf8MKtWS1E9JJBLyyCk5rj842qeOXkU\nU6NM61LRxkX48OLsbSZTcNHn9Y8tDQV32SkpKd3aji+23evXkGgMAphlauLB\nqv9T6pAgu25VKC/S8pub8FFJQgXmHninl56GrEgd/XjXQPBst8Fa7nf6gDk2\nLOH0NnQie9OZFzVf05V5EgDQI87secNNDW1AyMTLUcU3YQaneVkhyxYHcmXW\nfnKbvobHYYYt5HNexG59FliOA44rfB0IBha/U2lu5MvkTGDECg9GVBbvQ8h0\nEFv4CxKakb5M9QHNHEfts563BNfWVwVxGSmUUv03lIXBLx33hHI4gB2FHI1O\nlH7uyQ4MOvUcws7tveBaW6e14VeIZdytf+aeQfugKBykLb7YkbySFLtmTrju\n6D/W\r\n=RuaW\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.6.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.0880a1b5","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.0880a1b5","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.0880a1b5_1531244898330_0.0771902866261347","host":"s3://npm-registry-packages"}},"0.2.0-alpha.2105647":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.2105647","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.2105647","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"5103b5173623471c86980694b399d0f16fdb745c","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.2105647.tgz","fileCount":156,"integrity":"sha512-fzkCSyh8q2+al1zrLBaZwTYqKYEvRK6jsYySwt7VugbXmeZCoqvqr71bULYPDbRTIM50M5YZUzgwxzP6qBXc1Q==","signatures":[{"sig":"MEUCICYxLq6t9Y9bCdjXXimiDl0+mpMwUDtaVK/3CxEk9rPqAiEA6RNhdA9cSTy2ZKicg/OX/bSNIt0MyHF+jl9ieeujNrA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":302762,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbRhR2CRA9TVsSAnZWagAAyjIP/1ekrCqtR1yftnJPIdBD\nVKw0Xt6y+o0UwZEPDklpVTWnwJBWz/+FYCJhb3BXMPu3Ob3QihZSrfgAgMkp\nnuxwk2b0bBEEkAMzA+OIKTDcy1YhuPl/yEPKm0hMRKdJaxnPqbki57v+tg3n\nBmgzEBzv+3JWlgaK5USkPJBUsJ6Wl7WbMT6myoz8sIC43NmkVjNykrJK/KjR\nnISzeo6nEqNBaiXiH+r2Q+xjwIdAfJchpcaPZ81itFin12AtQljIH5iLVR21\nSqoqf/JLGqf4onaqA1dirYyEKd0HWM7BVi4RSNQiE6johgULb21jhdoUdJtQ\nky+t1uknET/8twObRbRRor8riT/2aDfCQE7eNwWrWynP9UC5MC463KsxDZnj\nGEuoOO8CaFuokYRDrw+4mzmq1evJv5coQZ8KtmGubqlazlyd1g5SVK9p3XIB\n7qKiizDwz+nxuiJidwSV/OQonPML5TqBHuabxqqwcYBhMsLAw5zEysvJJLIe\nnxEm0INNbsTvs+GYGQmz8wz3iWsY+Pv1IbXgwPpKED/KBia2aDPT8jZfk0Np\nzSCejBgGbeFZ6OZI2tbkviw1JQJc95NQxEXe1JGJzuzZqVUIB63eH6GdvQMl\nRpIy8LGMv+HsQlVqT1L3pabOGI9CDsfyzFnA8dOIEwxi+wnMp63Vkosb8dMt\nrtLP\r\n=nsrX\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.6.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.02105647","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.02105647","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.2105647_1531319414709_0.05440620488292991","host":"s3://npm-registry-packages"}},"0.2.0-alpha.a834caa6":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.a834caa6","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.a834caa6","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"e934c2e9598355ba82305b98b249ee56eae737e6","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.a834caa6.tgz","fileCount":156,"integrity":"sha512-qISyRERSl6LKSAQDDVpk7rdDqmHMgwvIEjkMDF1MeYZUjQc0/gNSoFckMh9sL2NIX9t9zkok4tYlDenQyjAt4g==","signatures":[{"sig":"MEUCIQDJP2oTBlom11iy3QaACTaF8lEuvZmgmni/WQLk6Y0AegIgChP8NuWYL7FRmsaXr8R0Ql4SEc01J2Cmoi4Y4jz8vNE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":302764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbRikJCRA9TVsSAnZWagAAQnkP/j9KPLL6wkAUieVeFbZR\nDp9yTLAbv4oyZyMz0ewH1YYLPG1omF6j7mbXD+nUZQpMdS7kJJDN9P/LXCbx\nY8AVqgwMCRFfo8r1/7NW9rbkkNtAffz163xUaWXFkv4ZDxfMkWHYO0qEGQJX\nERvUhW3YpzuUNq5qmsEa1v10pQqRZ8mCosA8QZQeuL/mazuYbeotI0KaqlLg\nMpyk8SlDy9WTkBlbLV4EvkUPK9qwagSoBiUVXsKTR84obpQHVGfFdDJlAgAz\nLA7S/ojcmi3NNU5aLAkRFzg56UCUs9cmOYe+8xHxLwXYl96SsRMPJHtAx6y5\npl7OgDlft7SnRJIve4isxHKbSCzk/1etvFe1obtsI+3w+Z1IcMBPTXrjeJ+G\nHCJnH5TpPRa/msW/cCqwXLgTq/dTfsTGzIy4pjvkDGfbYwCmkVWw8CGqg7oP\nSrbtX7uHRab0A9mcQWPTbj3+iYja9rg4iuYrMwKEBIJLKekdDnxJbVmBa3dl\nvjE3Bable3AZ16q9hcpgm3a0ZuMm8RS+jQsxpi+To1hy3cfyu3ej8x95mPmu\nNj70iTo0LCOIIldWsL4Lu+wIFQ10G+EkUg2MhlAV6PW5VstraJbX4PFUFkOy\nfcBP00xiS82weVZhJrInFP8bRicQCPzhCN4a3gCO8GbjX06Wm2BVoB1WEmSC\nYpk3\r\n=3gTr\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.6.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.a834caa6","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.a834caa6","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.a834caa6_1531324681085_0.31047259609653155","host":"s3://npm-registry-packages"}},"0.2.0-alpha.808ad2a2":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.808ad2a2","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.808ad2a2","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"df8d7a4fabeba72e6a6ce11835f5abe4583ba574","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.808ad2a2.tgz","fileCount":156,"integrity":"sha512-jF5d8P7UUCn6v9/Qbi+TrUCjY8In5Oupm4JIqQ0EzrpFGq1levgOJL+aC4V/1hd9Wb/dPcY4xuG4l778Zc7HBg==","signatures":[{"sig":"MEUCIHQvIkePDY9oxfU124+0dX1xy0ocx5QnbFqI/OKU0OFTAiEA/X+PMDCmWvv0Cy6kygMJh6jWleoxfZn9y55iTL4Bt3w=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":302764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbRlS5CRA9TVsSAnZWagAAQVkQAIkPPMp6yd5T6Li/85X2\nRBiBE3OyboNHgcDNiKimfDduCHahEjLTZGL+UPhaOg51byjA9v3iViVtWUtQ\nOL7gVXGat9EfABkswqSMIDW6UUX86N43LtfUEWJf4S+/bX85cJWeBu/haSEL\n7o/lNKq6BAmkqHacDN/F5uw7tMpezxJGe1kslrneqtDEZGvZ9DME0uTHE9/n\ng6exwFgY4/H9SLVlPJ3d8cq1Ei2FK8f2XK5OWPeZaTMRwcNUU/LqSsQG2K9R\nu8bSChSzF6x0cD127BFXUzbir0U/Ixp7g6CKU4SoqbJ5yHQFW1SvLa1XqYz2\nvylMZNfcxmithEid4iPwTAwTXWw3PyfbyiMDOAuP0ijArK6b3+ixAfSO7ue3\nc/hZnQEJQK2E6++/9F/GihB4/RKo1VdlrbeK8rf2r7SqKyAW689Y9cSrESnC\nB9TcWZdT2VImsyYju6o9rqJuIJZbpfUMF+/rbyw8MjPFxciRlobzzf6ftziQ\nwLkiDeZJYaFlc1msfHvh+zankF6nk4PmecVmZtrwKEi+XPhwk/iJD2gsLkSl\n3/yA7UkhhbplNYm2YOmQ2Z+FrBGnKYPScBQUdatfoCLdGDhAYKcon+GKoXeb\nBvWvuetbVRc2cj16cqDn+b/+4Yee/M59yWwwM43vneIQoXVkNKR2wlD1OJHR\n9/pM\r\n=jYx8\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.6.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.808ad2a2","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.808ad2a2","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.808ad2a2_1531335865009_0.4364394504212934","host":"s3://npm-registry-packages"}},"0.2.0-alpha.2383e1ac":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.2383e1ac","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.2383e1ac","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"677bc60ab811850f9c314eea57ce619cf611a7f8","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.2383e1ac.tgz","fileCount":156,"integrity":"sha512-VAKKQgIhPJDhlc0WYsvqbKQ8uxFgUop/87aKuyocb8wVgEtHRfVGmnXF1i9PHANGWXYkreoWpbdII0xbKoJlog==","signatures":[{"sig":"MEYCIQCntxj2krr651AhOeMz9YrPZzuLT9jw3N+o1WWfOVDMSwIhANh9sqSfQk/Fc15hKKpRqQiWohouhqH69CD8Q9UudpPy","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":302764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbRoAdCRA9TVsSAnZWagAAoCIP/jnZWv8rKeD5rcLpPWr3\n2oyFqWcAqvoSFJc9rT0Uv86eW4K+awQY6sFHB3wLU50LfRyodpHtOiEnNQVI\nEvnJR7eW3DnOw/iKt5o6QBSFhyNTcwijzLB88uFf7NDsHX3nzn6tm2FNvYn4\nRX1ye0v/pN15Z5sbFqWTPy6ZJxM5x5ib8RsPZkCyYhUAJUc9RFouvAmAvvKM\n/4wudd0nZ+2hy1zNtfY9Kw0JYPaPlqbBGaSklhFzvA5s7l8jKw2s7caWCN0X\nmoKxSJ9ywcO4SjYWMAPdQdNztGch8a9EHsj86TkrCTqu/GD13WttjW08Ep7n\no2PsdLzPuyfQkjBjJdwshHI2+b+ZQNDKm08OLsNjDFMzWGT0zvoBZAX6WWw/\nHjyV3TH6l2leJO2mlVt0PbAlJpwaqFYj1R42ZCq4KybzbmGGg01jYenGkQqz\nfhggMTksBJkEc8ZkPhQ0/1mKepMKXWmY1WlxST8azq3QHxI/R31+y3B8Z601\nX5qUhaULDmxn69lweRkVV1jPVtpJc4t7uIjIlGQ8RJDbPudxRhsZhYIhjWGn\nn+oMrRaRfvDC1d5z7J4OrTMk+V6igJnpFXwUXNEBOutf23CeU94jHjlaLO7+\noFkx0rQjKlklj0m8o/fOZakumWPUIT16MnteHbCC5ONwz569pDnggCg5Cdmc\n4QkM\r\n=RSmH\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.6.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.2383e1ac","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.2383e1ac","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.2383e1ac_1531346973175_0.5430281668882884","host":"s3://npm-registry-packages"}},"0.2.0-alpha.a0872f53":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.a0872f53","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.a0872f53","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"0c39f83f49b376cea85f754cbddd6017b23aa1c3","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.a0872f53.tgz","fileCount":156,"integrity":"sha512-yGAhRb1etCf3m/PeK8/f8rWhK3TI0PANSqXG2l7SBu9Llp9bVTVBwnuEjeLf0nw27NNM8zb/2wwUl7Wz0yo7oA==","signatures":[{"sig":"MEYCIQCpbXP+lG15uxWqimSbw8oS1F3Ev494cD/BKkQfo+FxqwIhAIozjVta2u7Eky7WEdS6F8dJMIE7qzdgkN1S3VtRUQa1","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":302764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbR2J+CRA9TVsSAnZWagAAD1oP/2XaiWlnMFWan0AddrnD\nxUnyQWBlp4mT1fJrFxybtarCKkJKCgKP+Fa9FtoKh77LDv5PLje5E3JlOpeq\nb9rYhYzEz6Yb8xql43Cj1LAV+IreuFbN/QKRYMhU9WbVfFv+e+KLT6Nod32s\njRsa/Pqzz1ULbAEZGUfSxXEXk08y4FBDyM1Z2XI63NxigMmCL5B30ORcUyHW\nyaPAxaJjL9vPICDviZ5t4DAmNZ4IVjb2EXDNyOJ6wk7P5FNgFcXn2e0VQH6P\n7UkctQ0ieUE921owQJY5Uhpnjf5aA71A4x2a+51CdbG42o8uZLtPero4DQM5\nEXzGus2jpv29ZL5q1OQeYW74UC53TQa8LmakU/RwdVI1bGdJ/zeDnDpI7fHo\nMprWfkQ6lIz70Z2i9u91PT8gGgZddGgZqDBBN/7FV//+5vNfd7BQ9p0g+MHF\nIlZX2gr5Wuenm2H7pAz5o3+9n/25wJT0zJPgJOO7/+of/jtsfoVegIj8uuYG\nXbhcVAkYukhMjp+Wv8lbL7slPFgiYgZ2/qBhcE/uWoreBGhs3hEXR8LLxGFP\nHN7MGdyJ3ZDtGf9KiSSvz4SwYVL5YlENgxIrNqNpiyuaNZbnqR42hyehdLCl\n5v9I4uJUvu5UyH/RMGrzeD3XNYazf2JMFwsobl77haLytbp5/ShxM6Oo8eDu\nv+42\r\n=2ncu\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.6.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.a0872f53","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.a0872f53","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.a0872f53_1531404925916_0.5707913622158773","host":"s3://npm-registry-packages"}},"0.2.0-alpha.b2a2bfc3":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.b2a2bfc3","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.b2a2bfc3","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"d95f32fe7e53963506c6aa722168af02489729b1","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.b2a2bfc3.tgz","fileCount":156,"integrity":"sha512-WOIs4n+ywgCg7diChTAHdx22n/RkOXx1wL7tmW7od5MMJdIG/qMP50VC82uaUvZbS8SmVBvlTi5c6olxEbdJ1w==","signatures":[{"sig":"MEQCIFUUX9pWfbt7STpD3nCyCrRE+tpiA5JrklL9UG745DrzAiAXCyTNCpix3URY81xIlVgA67ckoolSTuEIclVLbMX6Ug==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":302764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbR4L7CRA9TVsSAnZWagAAjSQP/1ErUgjBF+NWttdC77XG\nkL2l8JjY0hyHk+zcDQ2G7Girg5xeEG9k9vxo3qZl6IjG84SOizYDpyMdcvgk\nxj27YASLatcr8skuP+IncljzXLpHu2WMmLIJT+v6oIDDSWdHbPF051STU1cS\nl+rbInKbnZ6Pkv7fUqCPYoM+WA+rrLVCpwM2OptiuuuA3t3jsV2nKTtJfziK\nNjbsWrU05jET+eyosOuPZkwEG2fmExyp9gh4I7/4Qee5SnWJHdlBpeBilV4q\nZjP2hC7QzZtLqQFVSrHWXOkYXZSz7H/P9+fFlgRm5XUygsuhIxYXidZXzmAf\npIlXpt5DHh1I0+ypozWPrRe04oHKWmlRK0JLIjytlqaVwFohTjmvtVEP70/t\nyffJ2n56icedqwOhyWkeXYvOchTYOteFJ1BKCrePXIvpu6/9R6XEIyrBiS1X\nHJtxIZD2oc+VHzlmjfaLqcghUN11caRtMGTEtBnnKj4HHSTpxKOMQ4K8TzS0\nRkyOZVtZvRvTy8IaV3hHw/ikZ5gpQ6YuFjWwtd+7OXDo2kbLhTDlmGNVpGZK\n9/6WYetxBFPTQE4zVPU+qTNPUOukOOZ1/NCkiWRjxW3MW8eP98XPc0ltGLEa\nj2v6+tB8Z+VfFZzu5aE9uG2UPtQJjCq1lxM4mzHMw5h3Z6Ds5dHAewGuYm9R\nGiBi\r\n=SybO\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.6.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.b2a2bfc3","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.b2a2bfc3","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.b2a2bfc3_1531413243180_0.528605479721423","host":"s3://npm-registry-packages"}},"0.2.0-alpha.bb156bd9":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.bb156bd9","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.bb156bd9","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"2df99d32bfe46f3b5dc82f71e7a400c26ade737b","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.bb156bd9.tgz","fileCount":156,"integrity":"sha512-KSiGkqCfjIIA2iCdjOK6dp3qUcf57pdshSYDAjc0+/khPnGRLSGwNucUSZVJlOSWLGGbtBvXlVLHu8O4XU2ycA==","signatures":[{"sig":"MEUCIHhByHReVsK5pPwfUO7el7TDQmDl/OwWDYL/9YjWz/YaAiEArJKKshmdt4uhwEn3c/KHxtpUD16eSXlTNIRe+JlAKhY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":302764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbR4qDCRA9TVsSAnZWagAAXaEQAI0/q050hoDtwMNTC+wB\nSUfDsk4LNY+Vs/vS6RwL92ASFXFtuA0dcQD0tZ4+gc6wQswz0TOXpfgpCGLW\nhL7KmXgj7g6PsS9mmY1IC9PvOPJ7w6NKGwyWsx0zBAnwpQ8xHej39p3KCnyG\nBhayB3Lw8MBjmEecYq7SHQ0ouNQcuFMuij6goW9gOdJSXlsEhgoz4BlaEhYH\nebO3/oKN7/CjrI0Im8TXHdL7lgiWYpLiEGzWSb3iaod9wDZLXEGRG2OfGEWR\nmZOsvE2Jj7TyDzC4wcQc8xS5IGL87+nmSB7cs8WcGWAVnOapvTxRbJRVtX7j\ntg14+rRGkiMnu0IMM6MTsZoEtyTHNeyGhDM+kMQzwMwAbTJC6FmIkS/YugFf\nDoeS94afFcYKRSyHxAA2oLT1HDqSbuHG8qsJe9o7zrIqF8QalXlcowGp65Ei\n4CvgGbgn02JlOF4L/JWnN7SvDGB8LsLKIBJ5jiTTx2l85tvMqZB8PgL71nZh\ntu9w4tPjAzf3mRbAxMCunkdFy5ywUkHe5rBDrFpHVtKOZX+jGd0gfBy+LE3k\nIKBEPSNUXeZdgExATbSAijOjo4s8ukVDJFN1K0cbIH+fZryVW5k77kC+whzP\ncqIX/dhQ3R+TWJnLX4WWimKweXLXyamSaRtwP5B6MPE0ISJqvu7Ity38Fh6W\nu5qp\r\n=M9Th\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.6.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.bb156bd9","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.bb156bd9","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.bb156bd9_1531415171675_0.9791993114996691","host":"s3://npm-registry-packages"}},"0.2.0-alpha.d6236ad2":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.d6236ad2","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.d6236ad2","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"b9140eb9b12d46e7ccee1984734a31ec6bbc34e0","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.d6236ad2.tgz","fileCount":156,"integrity":"sha512-s6L7B8000lPCf5IcenVZhCPbrdu90LIwI0fA613P9vJ3EEMRRUMZFZp+5sUlL9JKeHv26gb6r4kD6yYYxeZRpw==","signatures":[{"sig":"MEYCIQCGGKJot96ZRxdvYHfkw/lsW1dc8KDTImi4r1X2AZnVIgIhAPtXuYoDL1wx632bKY9ldGwbFePSHoiSzjsa9KwPJSRc","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":302764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbR5g9CRA9TVsSAnZWagAAWAEP/ju7LgYixMtAFWnLXmar\nFFYLSSIHBcqA4TMiDGPO58WejbMHgMXK6H0OlpZv7tV8YuFWYqKFBqVOjgK6\nS8wMw6fulFExJHM/Q8M59HmkroyrbBPHxuavyveBdPBYKsQZEmD04/Um+KuV\nK37fyrIHxgIt1SjGfveGvFcRiiqqtOf++sYkwQkKLHGOHX8nZoUJf4rNsu7p\nX4SYMV5eXYcSIR9F5e2kzq06U+rhkOejJM8qcsmR0jRnuyZUEc6YjAsZXfXD\nI+YHeBueU/MGg7ZT8h+2bSjvM8kqIi0lmQUm8qoE8t8gTL50BuSlkGuiZVPe\n34YIDGDiXDXrwWJRrdD9GtpYMTAwvu6YAmqC5bM8VFX9ec4WiJzasj3ZuOTI\nQ7NSmqK+B/VFP1z7DmYIyOozdtK8XidFGUhyxVF2ffE6DrSpWwJtTZQzFTCb\nGW9JawyIKLAFJOntevBDdF4BUWPoNmBbD72OEik/UTN2KbSeKUATdPMiJVwh\n8q3x62lq4fy4SuqPW9ERBeGn3d2kD5C3w1CFnvOHXnG2BZpevABV7k1+655h\njoE73xGL/OwOCSWL+wUkBeoboH+9W2bdoyAtqO2YJqv0Isiu25Z+lVHWON99\npxi6vjX2YxaIsr65Dg8e2KC0Af94+X/nUgPVfXPHjSQTEMm1Cyy6F/DmCCkM\n3NSD\r\n=7qBP\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.6.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.d6236ad2","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.d6236ad2","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.d6236ad2_1531418685556_0.9134607394238783","host":"s3://npm-registry-packages"}},"0.2.0-alpha.bbd56b44":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.bbd56b44","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.bbd56b44","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"08dc73493fba261b17195d1a1147685e9fa07dff","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.bbd56b44.tgz","fileCount":156,"integrity":"sha512-QkqzVKODAgUH+nXM07D5eYq2EDmoeDctAbD5GqJQMC1RWQ5cxrqXFsdKwiX/o1V0enJ6QXS6pgjJWuHWsrROrw==","signatures":[{"sig":"MEUCIQDgbgvu8Bk3H//K2sWjA9CQ5h/uQglBG2AW1p5iEvuA6QIgOr2xGCnptq8wdeHrelpERKKCqK6wV0WvR79hzi2XSy0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":302730,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbTiF/CRA9TVsSAnZWagAAmrcQAJbEEM9DjvC8XhlRUwyG\nAxfNU8ydLqFE0ks/5rKzs3kLklmowIRIWbG1FLkKp1ivY8X2KvOF23uUzlFb\noRXgpEyF3BCGG284KBUjM8i/Xo4YcMYpxBD6FgWwLToiBdYKknsQgfHJEa9D\ne+irhL4ylWR765c6dZweEce7SXQz+uvZ4QdAfAT9jiqtABLxOkVq1i2XuZcq\nAD++u70GSaOFXXDBguNMCPDugbKAb0SA312whxS7sFMBBmLO8MIIdmvgJl6+\n+Ze+Z1AADeB/pr2EYjR6jF4pSnYo4fGeotMAQQQRqVZ2Qvhljh//QlUl6hfo\nDb3eSxwt9Koo6mNme/yX6zHJn1YIhDcPtOzop0w8+8Tm0snJIWmbs6GQr7tj\nbqOMzWhf2fd4bmjqWibr6THC/Rrn7kYenqLe5IISUhfHIwHcHBBeAk41xx5H\noQYwtxy2YcRqEKgzMGNPlns5F6cVzZUBiNAdSm8GWmMKSnHFdVx/N2Z4+rrb\njbHFCaDmDKqt1AYHtVjtWQzC8dfyNmkO6JDcOBPh9H3gogH21S+DmDVokefj\nevfLL+VyM/maxgiuyd3YZ8InBkl7Q2mMdpOCWMgBnFuw54X7YIFCAZIIkID4\nRd5kCZ7G8TVW7+nwW9j6gnwhvjDBDTFr8rnrQJNcFIexC53U1BEgwxOtcHhB\nwxwc\r\n=4ucX\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.6.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.bbd56b44","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.bbd56b44","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.bbd56b44_1531847038921_0.8740713830363451","host":"s3://npm-registry-packages"}},"0.2.0-alpha.74aadba4":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.74aadba4","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.74aadba4","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"5859087d3e535e840bbc7241bd6f86f9867ccc80","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.74aadba4.tgz","fileCount":156,"integrity":"sha512-4TnuwVlNapboUF/CtSTT+GCreDjBrZVgW+6rZZ3eyGLEMvqqyzn9V8vIQAX5YrzrP0BGigAnBIfxzEunFOwXRA==","signatures":[{"sig":"MEQCICB5wskHoAKl61AOXDLaYClJsvfCEw/Sgo+OIIWmImPzAiBY3ELzLcmCO3aLfXETnyTFpIFhM3AWjA1QZJaNwym3Iw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":302804,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbTivrCRA9TVsSAnZWagAAhEUQAIx/QC+cwLb7Y0g7Dg1I\nd/YVvUNpFEUK/EpiooWpl/9EZUU2f1xa+juJz5z+bK/q7cYHXoW6SZxibNpH\nl4XKesvItqo5AtrektjlaoeIpa8nl1AMruVtZonQj2caiOWoRw2ClVn0WjgY\njz3+CDa0bg3Sjn2hc0uKEept2yCrqja8iobjGR8s4VFFUgEqBVY+KFxxqvMB\nS/s84ed+vXCkbihcSa8d/ElI0P+eJ4ahkOVpcRtxp0uC4TuN0ps6ThfjGV/8\nknPkABURsQykMLaFrzO3/9cuTQ199vc74VQDrlQNlWdUKys8efi0M0bStsV2\nQYxt9kww3YxtDx5QDQPRMPhAynHKiFWgWvMPSq6MhgwpcwtynyoOxK0oi76z\nk1lqwHoFwaHfARvI7XgEoXaIFJ0n1fFM1YGLj5i/+QUiSn2pWiw4pC9DcY8w\nPxeozhArWkbAXpipNc33b1ri/iIINcQu/0zWhyxwwIaMrJXbbIZh3OoibSOv\nWbcKhSLzsDWSFxY206jDqw8LUKVc+snzsoyeJXDo5w7qCmnDR71KQFZXw/hj\n57X7dzYAf4kqAf4GYGY8Ic/aInfSfc60eDYpmS20SjJPzbENAkhYADMxUn8b\n3lYLYOZSVcpIOS/rO11rCgi3FxcUwv6mSlYx0rHj6rwalwkMDQNfynjKHoho\nCbhJ\r\n=2URo\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.6.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.74aadba4","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.74aadba4","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.74aadba4_1531849707043_0.3618789597875429","host":"s3://npm-registry-packages"}},"0.2.0-alpha.64333850":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.64333850","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.64333850","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"ed55dbd789f25e7ce9e30b0d3561ec2c65a0bf85","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.64333850.tgz","fileCount":156,"integrity":"sha512-l4vqA91IU5vNdRrWqsI5rA4j/aUNlRD2kbzLo76qlmal7D6rcTpnxc0PMqQIqHzWkFnW+MHSh43T0lgKsCqAgA==","signatures":[{"sig":"MEUCIQD6qfomYBdLJj57WQA6N44Ruc7ll3RL4swRHT+QZcYtTAIgGbwAgh87MgtS1vQFPadwsN0+yS//mifTEfPfKNZHuIQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":302803,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbT5/DCRA9TVsSAnZWagAAwoQP/3U346ZKS7htf3TwpkT2\nj6f50N7gzXLkMvld0qiwvnQJld/o1hDdr72Vg/vnosJVd+KWGQBmmBsF36CH\nDYFRRGIIrZRCSNZAyZXQbNVaCBCWzqcLlsIayPvxMe3njkgiNsUaQAEIoBp1\nAYv2NonGCyMRogcWn1hM6c0v3WKs9QohqS1pqlZEs4noPklXJbZ227TBdfPt\nnXmrdEWswqzyD1Ytvmorqhtd3B9/SqQoxYmAmhDEvsFoQrMWyggo0rPhPd1q\nA1yvZee9ThVGBNffz9AKK9OnFWfLR+2icpnMuO6ts5+pWowSpeby1ysmPYKH\ngQl7ETojiYtMzknrGClZ2hOBBgNwf66RF7LYqBo3dhI6wR6qSZ9erlFznM48\n/zP7zkKmUtJd6xOADK8Ebh703Udpk5NPoLbj/3vpAvmz1FoVcT/cqM8Y2kY0\nt3TigawX6vrMIVekeq9sSFSYu0Z6lSlcMGQ/DgfyK8fPaUNdW7leqo1ptyFB\nxfe+jzVprqZ1A7LnMX+tptbLnyOxhVOLnqMJN/4zoP2PobpqK0g8MfCJE1GR\nn0aS2W/kmZySoIc/P9vo1a+I1Ba4SH4j3Ke3jpa8rjMeOcsPmN9x4MkY0xCO\nII5kwXpnvamGQ5Vv+Y3igZHIT9eld8T6dAfZeUgkDbpTithzTZKrzN6mTkdo\n8W26\r\n=jqDB\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.7.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.64333850","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.64333850","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.64333850_1531944898909_0.7528531246754873","host":"s3://npm-registry-packages"}},"0.2.0-alpha.a6ee192f":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.a6ee192f","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.a6ee192f","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"08e351363594b77040ec5ec55f7d58e68d9ed48d","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.a6ee192f.tgz","fileCount":156,"integrity":"sha512-Nh7mYOkxV4MCvohPPpHSSjib0mnVfzNQNxlaUBVuZFUiS58mUEyQvcWqzNe/2eR3dncRWwQNUkMd99+4MHM4oQ==","signatures":[{"sig":"MEYCIQCNgZUfLEmfXvDSbNvskx94KM5vEi4niP+lPVHt1ogrqQIhAJpI9eq88nKDGHAr5q/FCrYxisr4j2odKGMvgHbLPtcM","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":302730,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbT6wHCRA9TVsSAnZWagAAIpwQAILntRsuH1IrmyrKShbC\nFP9SCCt26LBWSSui7UZhHcSNVHsoPXamq5L77v9BfWy5rZeqMA8ekgM/pMmi\n0oj+HWHrOSIksd/jmyP6CaBXTN5QMAyyxkRUfdKxpkUmu2hlzJhf4GO8euMF\nW6mgxt4NCiG8zFxgWGmqsR1FKC9WcLweUTwFK91bPJhTWBp4xIZHGZ5T9boZ\nRqGHsi2rmg3ZCMGZedDyN7a18zK++EeNz4yZbfOVHF9NHHhz61NWxtWPNQP+\n1f8NA7KULCVbjt/lTRa2HcnChP1htPxnANfxB5Ssj3AGFnc7dbGRbW30xq/h\nNmqlksbsuxEPmFPF9lTcXOKgwZMYKAxkVqetBmCMm/r+69OYPfn3/Xxw8skP\nA3gsenPp7+4tbPrh/laZelOnFgW2PkJjt3ih2vjqq11VdJ3KVrlVsALKeOB7\nDFrvrdoT8hM20aW72ayFv82b6bc0NLchERQV8YPcfIGLci6EaByTcsoo23U0\n7tmRa3MT/uE1j+0SiGRSblKlkSzMM7PyfohZZ8XnN32IK4XW5NWxi3QlMBz0\nnvl4wpEJ63x7i21ObQz9HtRHbWokazN1/9eHn2o8QBmrmecI/iZU0jHTDFOV\nBRa/Ic4Uk/qGMOidyGmoMBMV/2ZsD/v4W3Rr+Vm0ME8tSNG1t/Z3QAPLzxvh\n4sap\r\n=H4bq\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.7.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.a6ee192f","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.a6ee192f","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.a6ee192f_1531948039641_0.4952390174561434","host":"s3://npm-registry-packages"}},"0.2.0-alpha.bc7219c1":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.bc7219c1","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.bc7219c1","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"a162a6c1eb468e6fe856887de9bd9de6722c65e5","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.bc7219c1.tgz","fileCount":156,"integrity":"sha512-9hwiyDKY2dofsuHu3bq8NPqR56Z8ABI7svHsbVV83vG0+U4vKAHPo+4nRJtQRVdv8S+Gg0PTRRHkTYEJdQh3xQ==","signatures":[{"sig":"MEUCIQCOGRtiXcCtbmQGSBYxLHymFOGk3U9T74ENISnWQDg6VQIgGaiSFP4zJY5qIJkCyIndrFNVP0n4R34evYNK17m1odk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":302730,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbT78GCRA9TVsSAnZWagAAfFgQAJXyus6Q66vb8a9W5uuO\nQxjuRIZ+TqRNE9G85JrT9hdGnBrt/alo0FFTdbIZ+64zIG0XKsePhFLApP+w\n0geH74NALImvmgrq05MZAFuIOdk7JE4M9dUCw1HUd7Dbt5S6yRlOgVISD/AN\n8qDiCZtPd8eXGSpW8hocB4H8X8NOifF6X6ula+2OkDHasPe3RTw7wq5mPQ9u\npoHhz0M0qW7vBT9lnj8hyF1+VIU4rzaI0zJxcRCeVLmp7ryvG3irhd6Yi0EA\naiqdhgYWiqJCc/VTewlUTOUpNsZYIvSbHk1ZWlVwH63TVoRfgytRFMnJ+Vlp\nA9jOFD808BAl25Nx/YcHKDTfWIhV7yZAasPGL3I9fxbzWgu2SfA3J5S07gmF\nZ48d8dYYZxhMkgdoYsU37ATIpJN0o97WpNlZ+OhS5LHR+KSRXXtJUz2xS5Q8\nZNEV0TeW/1AUpZZTTVXApuU3dm4lUf5aklw51rfVVW7fpMaSXK0bWxVvgpAn\nggQyGiF5ygHB/c2Wr/IeQV/1a8qbQ8SWQLWh3Fi0leT5SaL0XNVFBiFaEskK\nodknwtCvme42oKAEBNdqR02YTCZbEQvUSeZerYuu84fTg5F6o/WmvxGhAkXE\ne3kWlvCTAqLaQyAlwy0GNObnfl8YcVAERGysd3msl1BfG1obGBgqhBs9WoST\nUehO\r\n=cXKe\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.7.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.bc7219c1","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.bc7219c1","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.bc7219c1_1531952902579_0.0209004636897141","host":"s3://npm-registry-packages"}},"0.2.0-alpha.83aba47e":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.83aba47e","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.83aba47e","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"dd5e228b911d1e70e678fe033c0bbda69d0393be","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.83aba47e.tgz","fileCount":156,"integrity":"sha512-WK2WwEznnL1Uj00efb56DX3hvBrdcMnPRm0T+jzEUXtndXZFV3vnC9arsO8PX4EgQ+TxIk2chunTMVxHctyXZQ==","signatures":[{"sig":"MEQCIHnvW6Rhkdzk7ZjFVybuoPToTnO7APJlT6MGFOUqjRsUAiB57l/Ze27caMh5NbEuu+qhvldBs6pxfdZojKckPXzDmA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":306899,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbUQVsCRA9TVsSAnZWagAAb4IP/075Zknm8vLdD0muNTYW\npvYuqrJSY7azJu6/dEjGWT8ZkWMC7Dos9P/68xQ56KWY5JPe55hvnuvdeVOt\nsCRXthFX6dpt9cmUcOvaBapAT/P2m3n8TwbDgUarVcj4HxurwHnCQBz3QG40\n0SjKCJX6aIMr3UjrJYhutjmeM3sca3UVqHmqKZJWPibyRvqEQFfjkhpbztPT\n4BOMJ+sMpzEyLP8Jd4v+j0/Sm8cFLwgp07nAJTyvGQDrCgzwrOXynu2grEgn\nG/1psMhi2ki4rh2nBngFIzOXabP2L9tI6ElFgpdk2nMcrXYCoBLoVHjW4XNA\n7SaXDuvgm/N1mcJOg4DNWKzrjkzrU35I9YM5z0FgH9GXuODmSong8bj473T9\nBxjY/EtXjgQObZ3haDj00vxwwI9amSVyB1aWG7DXn0qHmlNO0/7gf4cz6ziw\nU85fHPGsvUQ88OEgEJeFaJVyTtJlaOVs4R3CdxV2ukiy2F56HYH7LOFWpBAF\nrIriutK2pdU5coH5i0kiPZcXnIZysFkiBXqy97HpMTS+5QQta+KMnCZ8cV9/\nohYQ9PlI0RpJd6hMpO1pTRjaRcJNr8q6rvZx3bmBhtsRrz5+IGVXUGAf88Yq\n2cQ7QqRo5YfdWEIdQa0NYvbPOC+MiwRDobb2tg3FI0YRmXBO/U/zIUx2N9lz\nWYhI\r\n=UP0V\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.7.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.83aba47e","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.83aba47e","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.83aba47e_1532036460748_0.220829668554958","host":"s3://npm-registry-packages"}},"0.2.0-alpha.71820862":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.71820862","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.71820862","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"a2f2fee9e27fac9807b88f0539ad67092028b82b","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.71820862.tgz","fileCount":156,"integrity":"sha512-kQ8ew4KzqWz9lwICroQfQPhPoe+KSy80YTMlib+ywfmC1sV89G97Jx88DmLxqPRvvT3KsKU49/wSIMg6ZhNSaw==","signatures":[{"sig":"MEUCIQDyfBu0haUmOvwR2VmA1gwf+yWYpVr24vWgAZq/GtcnagIgKAc9W5xtTL4Dk6k0N9qIPlMR8PPz+/3YQltJtA9V8ZA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":306910,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbURCICRA9TVsSAnZWagAAb74P/15vyCA6hzR4ZPOLNy+E\nIV2EpbDa673lSfFeAW2eVI1BVrXdihx2WlXpj13REl3vkWmqeMNiTmmVxFrM\n766bZjXmuw4WmGYCF3ZhPCSRsHuO8X+jB7bNO/2XXfYhyk9G8UQQtGLz4UMU\nGoN/O3MZE9PkLXZu7X//9/odJFkcHROKF0rapfVLJZLbi6LYM4Iq6Io0g4AD\nvnJ4NBQ9mBlR2GbuwfK5tZQTSTriwupzE3QOIuVgnPOK4vx3Pu/ZgIOPUUi5\nQCjIuloq7vutyuyZGVWWbem+Rjb5on+DZMqsN6MoGT9JJ6EX/QInHD1nilAj\nVgwyxi5kX4giG062AsJ2uf57EiwNol04fj+FRjhUAdci2zisp7s7tjPNQh3j\n8kt2faR8zwak3fACa9O8/zEf7irNO8O3ZCbOXqx0x/Zlklv0V3Ntymz7hdcE\n65Y03sMHFMQQbnBWLYLodXOtCzDeXgb+WMkKJkUZrSISh8NreAHa6B5Vo9KJ\nvNotDLyTYxeJUr7kX2rQ4KLZCiYv+Olsy/83Vx472E4ljgtoyA6VUjyPj5p0\nkpRIvbdswWFwLlzFtrofYd9PO9izsjPFIGIa1dVeGRlYZmrMZluOhrYIJKFF\nJ0UjHxglEcI/zZVCw8XQ8hyAs+zVOHkZ8446ASYOBp2Kyn3D9Yj5amtOvP+G\n96qV\r\n=1qjn\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.7.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.71820862","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.71820862","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.71820862_1532039304481_0.21546304425946272","host":"s3://npm-registry-packages"}},"0.2.0-alpha.bd11590d":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.bd11590d","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.bd11590d","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"98264606ae4fb62d55381a8fe1dd8dc33379c732","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.bd11590d.tgz","fileCount":156,"integrity":"sha512-PKQuigRdcZgtydygRq+9oUSYSJ7hLS7THhVkJu6O0KQdkGvFDj3pGO1RBucolGIvb4R+0XGhoTNdaeRaLFMSSQ==","signatures":[{"sig":"MEQCIC04p2YGDG1jtKyy5wNCkGTzX2EZGhkf2P3gTzEYeIkhAiBDzUyfYwh+iTaT/hmDjwm7nEewfTZqC1R0bddsfOxjDg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":306911,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbUfBjCRA9TVsSAnZWagAA+9QP/R6Jn0/JjQzbA9nJ5GnL\nt+SHwMkzG8IFVps4Vsfu52NH8D5pYroZvgzLDRy0t9u2rcvo+0lxu84prcy2\nLtcjd1iUySbQeFb2cmJ/SzkJLcGNTn/Zk9aCIcncoebiCB0ai6or2wbXVKkB\nMoG8DPP3MbY1/SKG6QVK9X0QYGsV2Xxc8Oa/XlKzS30hOfxtPSqkO+qnN6qy\nIVGZtz6xrRrrNjT1o8tS8YdZMcEjl+ONIZOW2btYMm2mfu35tRkHys73KLar\nDNigIZaQ6mDvHsU7AzXroC/d5ODZBaReHn02QDaJs+1w9fjpvowJozvXlumy\nCzKPq10Ow/eEnp8vu2x+IWEsU7I1LtYYJ3q2smpe0v1q6iyEgulj1dyV/J0T\nWYudzbim5rVTjvOdBfeyPw8vlcWlkeMriMHKz3wPl6n7hv23k4iqHsaXep+b\nNkAmgBV0UW5C6ZcITwBpHu4uvncNZrQcu/9GhpXrnzTMlfZZ3V5sFkO9zAUT\nUtpvT5kHGmkpTGcKM4UhhwbwE/cCK1PSxAPOBWk84dVM0LpZLGFLwtdwCZnM\nRp6xjpygybOgVJrZKCKdhZBudMt4ytIzf5S/iblvhtIIcHIaKd4V9YHO3pPq\n06QkNeEFWK74lmn48uNAEHpHCLbBoI6WlUVy+qxyW4LMJ+/QsVSC7DyhbtFZ\nuIqG\r\n=86c6\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.7.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.bd11590d","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.bd11590d","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.bd11590d_1532096611229_0.8921180978582164","host":"s3://npm-registry-packages"}},"0.2.0-alpha.943fe174":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.943fe174","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.943fe174","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"c50a1dda90305e94d0374b1b274d48f53fd49174","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.943fe174.tgz","fileCount":156,"integrity":"sha512-yebeFwixhIaw+2FvtUUNSecW0eD/HLT+ryToui8wD9vbwj1WI9JOEzwAAlS4d/3DSubWAXKGqpepsFeceFaXcQ==","signatures":[{"sig":"MEQCIAPeAk62rwVxKThGSBhUBKPqD7DPobqOUdgPuZTX9bxrAiAl4hXGKTdI/9wjbSs0QJmVfsZ7cEXtbPVc9w64zltDmQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":306905,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbUhjbCRA9TVsSAnZWagAALiEP/i4QOo0pi3ikHRwxLba2\n8pFe5iQ5OG3keNc0jNGhT5fm5tL/XcYHgiLteiYp7EMffLyyRjqEIVzPN1zt\nKLsaZiyw5h54Qb1AgB8dcKPpRBRmRyT4nIGXqbi3z4HRrsdzsW3FFgK4TkV+\nmA98F+Ssue+paHM/3wScsAhFq2BXdMiyUJo7061HL1XCB0OHRpi2QDBYr46S\n6AWFL0zqJnXv7MG32p5AJByevDx5U/Z1s1ywIfnmSGpI7yvpOtHJQc9nYOUK\n1tpTO58+74JcJH+Xj5DFn7nybcSXNnDQozCq1A9JewWDvhlSQuGcF79fkxko\noPl2Xf+ft2todEkVik59qRDnMITDDACzE9l5utM5xmNHB5UCUUXDayvyg0oe\nEn7pbqr5iCN8GIOU6McAQEhuRrA5PiJHNM5SElfEdrQzqCweYT4qemv/3aJp\noR8XoFv6Pge0o/j7gXq+SenN5PgyukbGk1RF9AplDCUnxKTum892SNZvr9V1\nZWHHROHqasQDmZv/72yrT3OPUFtAMKqg1gbBBM/noscrHLzVG2I2eXQXz6JU\nmGPeVD6Vf/LkhCNZGGhYlbMN9ay0021FYNHkCXWyyjxDK10kddi0usFxULTt\n7JyxZw/szuQ4QSxLN/Jg30qSBp1nMNzPS6HAUFs3NeBrkzG4MrclgayNhJy9\nZZF4\r\n=8JRM\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.7.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.943fe174","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.943fe174","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.943fe174_1532106971603_0.882754992926865","host":"s3://npm-registry-packages"}},"0.2.0-alpha.3f838cc9":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.3f838cc9","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.3f838cc9","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"1a6617a95ce3b5b013b2a7bacc1650df08becf2d","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.3f838cc9.tgz","fileCount":156,"integrity":"sha512-ri2x8U8Yo5o47+GyBHT/zWwwZu+FMRKt5rDS5oc+mL/s1o1M0WN1J66rEF5F/ohRzV4rlW8TBRrQctN9coQ7rQ==","signatures":[{"sig":"MEQCIFAU3Df7Z7xYu4Qo9V9CKRWNngM9UMbTfocBSKlDiCZ2AiBe469lyd4VV3oFVRMSOpM+9eSIbuChR47hcN8Q5q5n2Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":306785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbUkHnCRA9TVsSAnZWagAAhiQP/i/2a7ggH5EcwYxjtyxW\n4gu4fA32ADPdup1o7JvVMPVJ+/DC9i8f8M5+AJgJowJZYSG2aPTuFg3iRxhZ\nOd1xxTOuqHMPrinXApHGCnosRfkTUCSDjpRO6nBMD+1xRmMaBHrQdgAAYu/J\nkp+6ShEGkU9b84CMXGAyuYyHs+lJEtXQ9D36dKcMBIds/NH01NkAs7Pj2yZt\ny4no8cQn7WcHFUJK/B44734z31PhiJTobtcIpUs/lGw8polHI5bFl+LRtjt7\niqPr+nf8XW3zhtZDHA72486c6/OiZu+J02DM0di2mQhDCVN/vTnvfHhEV69v\nVQyR+nOR098yGVR2AQZdVH5fBl+KvUFX01lsrKcbXsSFvZkKAnaFUCWDseVN\nn2J4aOOcQAydtqp87E+tQ5WwlPe0ifeac6kNqML6P7Cu2Nmul01bdhd4ImHL\n+V3Gf1VmyHf2n/O2MvebCvh8tnuxOheX8gkcLKGNzcBsdeXJV6PprdRal07b\now44qNDaCWHTYPdksyXGYZPDCDIrhbsafFycGMT2RSwWfYu+0y2B7JyX9a6Q\nMDrCtdZLuC08+PPn+rBfiAqf/ByPQgR5WHb8HGUjyBUKBXenXmKYnCAkbZER\njJZFGL75jke16IiqSa6HsT364hYWkLMLX6VJLVgeojhSA/UZ/7TZlgVXFWuh\n5jrI\r\n=tjjs\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.7.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.3f838cc9","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.3f838cc9","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.3f838cc9_1532117479523_0.6598313143608208","host":"s3://npm-registry-packages"}},"0.2.0-alpha.7f49f4e5":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.7f49f4e5","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.7f49f4e5","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"overflow636","email":"overflow636@gmail.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"691a42f98dea1d8e91e84c31c18f208177abf427","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.7f49f4e5.tgz","fileCount":156,"integrity":"sha512-a/rc2vH7Y29FQx6a2t5Av3thfZNS+0jafc4RYlaSSAvQT41ivbun0RYP1gtmHmaK+Oil+QIsM+zbiUKa+NBUjw==","signatures":[{"sig":"MEUCIQCE5QhbcOXJ4rixu/3QqDwaT4kbceQuOO2gx4pl/vWQLwIgeEpTYaCdWIQGr/4cMo8cRTzu0dEirpsX93maCASh6iE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":306785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbUkxMCRA9TVsSAnZWagAAa0MP+wdSInLJwZ6goO4ir0aC\nSGx4niG7UnD4R6G5CHqfGBgHtXV+VFghQd/JDZc3E/TSJtSqX8+/hWBphY8N\nrztdFDbF3nmkglagA5AhoaYmnMUOlvC4yE2LCz4ksNQlOoBQ4NnQuOgFeiOy\nMEvDkA+KZ8po2EXQv1m4tQjGwV47kS/Wfi8np4Idt7gr+joxSDSLtr8a4Hbc\nxFIB38YgHqjLtov1Trs0mwcKml943pOct8BPwnrnT4LkiOcTDjJNV5eAyS+z\nv83G2DY3OAUId6iozuFixk+IOGXpbtXa80LeBjigZLoYgJWTLKtnkTizfpCc\nWox83L/elGlhvEQaurOUI5sLMrifA2d7c0+IRrCYMB6j1wTFr1uKxsIXz0rZ\nmF4h7klXj/l3c8U9Mr34GnRsE97UDX3oI3zc5dKAgIQbTcNsDo7FzDZR99zL\nEOut1IExpX16+T9MZ8nbI3kQqGBUavmxKWpoewJ9DoX0hKAnvHRAfvfbCxNj\nTeOuOHWg3ozcrooFNNvQRNwWXqZCuFNwleYbJPSDfBZcVU/fdgCw5Mubiyxo\n15Tzoxdzu1G3DewIxVXsDlwkaHfh1Y0ywsgSRRW/Jmw/RJhv7D7d2XXkcJCQ\nrvMrLt9b774M8SYsz2H0burpPEgfKqmD5q8i2Ru8Hy3hlxDsjf6plkrTF7uH\nv20+\r\n=domI\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.7.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.7f49f4e5","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.7f49f4e5","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.7f49f4e5_1532120140617_0.8052391198977589","host":"s3://npm-registry-packages"}},"0.2.0-alpha.3971d89b":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.3971d89b","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.3971d89b","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"53acf4f87437489061dc8e64c74b02cd9e3d9c05","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.3971d89b.tgz","fileCount":156,"integrity":"sha512-a8rfizj/TCnXvWVRPUnNbfJr6/xUVNz8igF8L2GRzFuPwEty0iOY0QV7CVON/QO0tgEWUUaSaQiksK6o9kr+rQ==","signatures":[{"sig":"MEQCIFVzGPiiPuva8kgMGQeCypRgueUBmP8Dep170Y+MZcPkAiBbt+JiyMtlfL7jVO0D8FafWCszM1JhIRUhvoVWunG6lQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":306914,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbV2nVCRA9TVsSAnZWagAAb/cQAJshGskGOFGdkenXtScY\naLxOdipn2mlw+8OVgJ3eRDqqi2xaCxcKzR0Xm7yYaajKkgKDmv1J0M/B8+uD\nXyyricQ1Vu6/G4t7l1ii5nku3XOAxxoEtbGmvCBhTXnGIVv5gxhOcddFQE5E\n57P7iPMWAaFYF6CLHC1wyx2dB9TBoVAPRKr0P8uVYckyXKlln7nhwdywUrLi\nDkB8MGlEkeDhb83HmnnrDYo6TuAG1aLjGgpfHomQjx5BxwnQ1V+HmTvB94Iy\n2QLLFA1TMJRxABYakUL6AvxVsJw/3BxZaxdkwhlaQxGQNdp9t4af0Kyid0pP\nF724Jb30Sj29CcohE8Os2r6YRtT+CBYPKwfRZaX8vqUpt0/Vq+l/DQ/CCk6C\npLfTqtwmJxY8sszPNG8CU0VZVhZv/HgZsAtgK4UN53rtJhta48baC1Fh0v5y\nNWd+oHSQBaA9KRBEL7Olvn9TkII+huKn+XIa78zX+fkZRapFwovujFxVr88H\nBkLVd95mrRXL8Zxn9vqHNJXbi1zFcD523wwtsJs3OVWgxQ/b3JaOT8CXZQ/6\n1OgKZlboM2Wx4fz/9iDTqb8Y152RmsiY4LTOJNNVE6/E69/bgwDoqk951fJg\nJSOqZS9l4+LUT8WDRb7Y54rpqng0U2NwKH9eLD/ODKavWSHL9gzmTO58llat\na4Kp\r\n=KH7O\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.7.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.3971d89b","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.3971d89b","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.3971d89b_1532455381034_0.8360310482728297","host":"s3://npm-registry-packages"}},"0.2.0-alpha.8195ad25":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.8195ad25","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.8195ad25","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"8d6cbc7fe55ceb20b6038aeccf6e5f1854e0e54a","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.8195ad25.tgz","fileCount":156,"integrity":"sha512-Kz19IWmFqcoeFPS+/JA8BKDxX74cO01JQXwhRb1f0t/2h6p1T+50S35QeeQrsxwvrbVn5EzgOwQrPamw1dFrqA==","signatures":[{"sig":"MEQCIEhf0zdUm36LK9o9Ya5Nz5gf0YWaJqYE5puwrMouiboJAiBp4/th8tJTCPDQ3zDnuWlypJHgcL9mKrdcnsZWLDmeLQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":306914,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbV2ueCRA9TVsSAnZWagAA5VYP+QEXOBAEn0K/FULl1AQR\nNSx5AB5iwkRA63vhWNZBVsvgI98EH660rceYa3luy5WqlsLA7YMrS4ndDyfM\nU+5mDD4cgZp8KABDhP4aTlxxWhU03IeDAP+b1kgzXytJAauH0++82vtrslSd\n9ZLWiUnn2gvU3K8umXTi1buFzxJBjz1CXS+YpSsUck5BeIfMq3hGX53W/qQI\nuzYQkm/NYWESdOx3W9s2CM5lg2+Dj0uh5uVP0IEaDVbh5NPmAi9pbS5cWDfB\nQMmxHvjbIdhn9b0TnMC93EuD0BJfupTXzTnPkdSW/Rgs1KswA1q/A8A4uzHE\nMdRaR/iVlLD/u9Poj4Eo7yVKs4CeuwxX1kpVszvA2NNaSio3aObcaedjmwsV\nEs7b5vI7Qf0r6LB4LdmlFK29h0ittmeyUopfQ5zGe4Dll4d2V1jBD3VqhzaE\nDHiEuDPZkzHzzyMU5AXu3Hbvrpy9hCOx7egsbOZ4pgR0CZoSOSSnL5eYO3T8\nDWcb201LXpI1DNns1NiSVOyuiIWzCnltqflqBR0LCkKOr9b63np//4go3HLN\nwiXOCJAlKPEhGb8Ex4PZNUsYZu9RLNjxztF6rVAQgZgrDxoKBI+kRugBZamK\n11pC2He1rs6sGrOVjNflsN6DWVtIdWthcAsRMAZR8H6nE8SaCmVHUonnZkk3\ngyjv\r\n=N1o8\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.7.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.8195ad25","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.8195ad25","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.8195ad25_1532455838606_0.31640828784216324","host":"s3://npm-registry-packages"}},"0.2.0-alpha.a677e08f":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.a677e08f","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.a677e08f","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"c6d9419941f1e6c9b3c27d0e4a111320a5002429","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.a677e08f.tgz","fileCount":156,"integrity":"sha512-pS2T7DPb7Hj5EMz/9L09BCMcbIRUOV6560SWDPzTyiwSbBbdMR9v0tM52uHSUfVRI46u2jrurAMkLuz23qnCZw==","signatures":[{"sig":"MEUCIH26Qui+rrNg83mxoCL7rhRwA3xKA77uigFIKaYpBS8TAiEAqj5+ubtSxjZzSjNHFoNi0sAzpbRPxf2/zjvIf7RSmZ8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":306785,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbV3z+CRA9TVsSAnZWagAAfw8P/irHEUErGetijFx6oAxD\nDLBWEmruQ+upJCQ/cqjZkGhO2+x9TrD20yvayEeXkVqXhlWkUv9kS04GLkjM\n0OlB7fNAfaObPIvqPu3QS4zm1Xdxzw3KnKUDGun9X1px5qKDs1p7t3JA17ZV\nuZV1JJhXkZlqAQDIZVMFaaL9wfndXAeQsgFZzIpGQMeB2cWQ4cOPtfLCJKxa\n/EuxeBr/4brxHvVGDqDnwWaii3kqC6L+x6hyd6rmHeb62sbniTdqE06aLLAC\nb6ojU6/6ii6ttzVRNK3AKrS9sMtbcj8yEwYRHBruUgsRy2ZSze3cdtsE5dnL\nXCefI/9gnZMHNRfULsTK/r9yMaE/9nRCeYaTDeRUyKOASTFjWb+b5eEvUfac\njOs56GEuQZQNvDgE0N8liG89X5Vdru2ZS1nbgOXt8VzyepKv08qfj1GsZ6cl\nesMlU5JhvjMW55fgbpRSa3ylc9u4oZL73Wrb8a4WjCEaCHZS9LPqFtvbinxo\n7GANEa87T8Y47GisLf3TTbajvD1FO0FZdNIHfFTjB/aoQDJ5Xof5CiZY5oUB\nvT9CcbKEpDVXdeKLqaO9Sql44+VVL8oo2Ia/BU3rEjlBev0/7oxbHwsqzK5n\ni4V4FKXQnXb5xwm9bLcS/m/HY7dRyYIwykbRr5e6riljwQMuYIE2KksEFKp+\nd1hx\r\n=U5Gj\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.7.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.a677e08f","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.a677e08f","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.a677e08f_1532460286554_0.9500198178608141","host":"s3://npm-registry-packages"}},"0.2.0-alpha.d476994f":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.d476994f","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.d476994f","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"ed938ec7b74f21848507ca1110dcc37908ae66b1","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.d476994f.tgz","fileCount":156,"integrity":"sha512-g60gx1GI4zIpgsqHerMCNADUk8Vs2auVofx0Y9A8brPkrYvG6g2spVZkm78Gnnit5NCi0n31bZl53+4duyAcog==","signatures":[{"sig":"MEQCIAPLh4D1Ipa1lRPQS/sxznCLSx+qsOVW3YgWaNk10/u0AiAPaUWVLC+nwTT4h3SVFhos+AEasBLJ0AANSvegABTZGQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":306919,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbV4M7CRA9TVsSAnZWagAAIpAP/26FVLJKmH+roYdMjxdM\nidd8SzVDiP6dT/DOaXSCBNkPYu5NHLMBopZzCVns37SUiZQsWBex4TjVRXrW\nk7Gs+JoZ6nGyWwXGaK+JUHEkWcUpDS8T9O88Zp12BMH1E0mKmvAom3GC9wqP\nCMTNr/YWrMLBMwlX/MOFr0lV5J52Ixj1Kcj3KF5MizIgGyU3UhfbJ+DtDAuz\n6WYOercMDH1ohJNROhWHJRJdy5ueLNHB2BLmhGsEH9EC/MtFX8V6d4uKRNjF\neTc6kwByBSrqNfclyo6Wc+WK84INCDIsjPqYp/etfWkuNv+8DktE31ms1P83\nTJzGxuaKWhPgQvvVTXBZ3oQ5GjA1pnMEom8iH+Lz9qlcyq9hHYV1nhia2mr8\nd0/h3XEM5V0m0eOQ+7lL/H2SWLU3461SAFz7XD6HIX43n1folsp/TTr241kM\ncZxpfgXhb50LolWkT5d584gz/E/ZkdmgccsCKcsCRD/NWsdSXL8Ecbt4ppXg\n8WAnwIRgUWAkhqiaZMvQcqNF8Z/xkeUjMdbUDFMrxwNMEQSgRHNvbgLVi4WS\n5b1dtd6mZ/10lMlrGZ5g/vEb6t1M+q4RPusQwRRDB3Ak/pqUEGhCW8a8e18M\n1wLWB0x/QsSoVpS9/+R0VJ/Mxa9maaZWnWdd5pRQU3L32Lv0dOmMzCHlFsAw\nGLry\r\n=h37d\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nEngagement libraries for Flagship\n\n## Providers - Analytics\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## Providers - CMS\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n+ City\n+ Country\n+ Date\n+ Postal Code\n+ Region\n+ State\n+ Time of Day\n+ Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## API - Analytics\n\n### Analytics Configurations\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n### Analytics Constructors\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n```\n\n### Tracking Functions\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n## API - CMS\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.7.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.d476994f","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.d476994f","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.d476994f_1532461883375_0.6910348950896634","host":"s3://npm-registry-packages"}},"0.2.0-alpha.edb71636":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.edb71636","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.edb71636","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"7975ef73287bcb7d55dab8809d8331b8379028cd","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.edb71636.tgz","fileCount":156,"integrity":"sha512-TLGrFSvEH2NTmk4MzRRg6R+wyp7/cc5fKGjX5tg/ikB33VyXV7xgC7phJGP3earLEgooX4oEknxBOnQiUzMAPA==","signatures":[{"sig":"MEYCIQDdLXbgaaXi1mATE5rHZ/tm281mN2aFl6DsF5LOBHZ4/gIhAJbKG0FgC9UhWE0tugVNKqYi2EJgRl7I/UdQCL98uonY","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310589,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbWLkiCRA9TVsSAnZWagAAoFIP/A76fubZxXvPJ7DBISTu\nMqLmgtCjpqGbItT/UeIalureiEL3sclksgoHjDOOJYRtf9PYOKO0wnxwS8WY\nKvV2fnjvtiBP/NyRwIdQklNK0AYsNF31Mb7mJFamUNHD6MHw8TyDjwNs/1BS\nqwA1dcALpv8wjht2ap+u7PMcpoi9LPbdDKYUD4gXvovYEhQ97NQJShrgbI9n\niLkkwphUBX3hSWI9ayUCdjaG7ewWd5m3JEJItsn9zBH3oYqO4zO/DN6gVzmP\nGsljaIFgzDhYbLlbkbjOhQnOZAZmLYbnTppfuJOowFi5xdd9ch+9l+v8Zhnm\n7h9/V3tXgIGKUb28a5Dc14xSrk3TmCYpp2WTwLhOmyNPMW0SzfERMGngWcEe\n4z4mIMava85SM9uqM+xAZLhuqHiFNkPnMSODBuePAc4DNGwO39BRHZ1kkvw0\nnyVQuxyCLep6kZOkxj6w0Mn2fIRrqODAhgBsA4z3QfbKDCRJ9llBzhn1DTTb\ndUxaHh31fqSOSq4IqRLgNzTW9hyBU8PglFKVBmc+oGRZ4XdeGdxGzSMh1D8E\nfl0uojsMa77m904BSfb6OiapuvIud5IMojM1sWg3vIubKL0jn7CDLU2aujFP\nzeqGp1J0bLmp0XTrErqMaMEP/QuP9Ugwg40fp4Zc2x0w5Xgr+4aVfjgQ+hIY\nP0S+\r\n=qR1p\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.7.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.edb71636","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.edb71636","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.edb71636_1532541218240_0.9611303895540004","host":"s3://npm-registry-packages"}},"0.2.0-alpha.288096b9":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.288096b9","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.288096b9","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"72b2dfd03ac8636d755ff7eb775958eb750294c1","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.288096b9.tgz","fileCount":156,"integrity":"sha512-2ktZdAYZ67BVUWgbqKGTnXKeS0hE5YPsv26gvdSiPsWK1rs9qeozEdhw/fv7L/qD9hv4miQpH+NxRZwtM0C+7A==","signatures":[{"sig":"MEYCIQCOAZcEwn5OqMDE3HkraspWpnjhcekESar0nd6MioznDgIhAJ53vnOPd7G5ITWj8Lv88IUr3R/NYUSjhZb0jEHp4wi7","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310469,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbWNhmCRA9TVsSAnZWagAA0lcQAI8+thUgv9XBBYY6Sfi4\nM/KL/39r7HAX3TG2joemxvj/oP8aP4ODgcWfr0gh1elUi5pbDx1jBTG3uWNg\nQOR4tw0oubrizKCrlxD1iWN/i+4JTeSKTjR3D3v62XFX9lIaRwwTakAHEbyJ\n24gj+HWGoJBF6KP/J4D7aUORECRlsycPdH+JCW0Et9m1H+WEO5P3l5KE2OLw\nZOYMv00NnO+iKlN9GBma+Uy64RCMhM+M5jRnxe8t24i184Z5lI4eIgRWcu+R\nhWAe1g+cPQm/7239eDRNI26GqR0RmWaRGT6CiF7j47fDp+k9KhmCYlXn4xXD\nB2+7zeGhAFEOUjvNRZUm7N9ugP44+vFRpNUYq6S3/z0CXnhPx5WhBrjf2ZXF\nHBUr0E3uv3pmKO7doTsGsjTlo2IjyRLwSZP4m9ihbgFdqpbVbOcWUY+wvB9z\nsg5L74HM1RyYUy907yOqaSM1VjWW3FF8YbAEvukGxvgKQ+a8SFvfk0q60AKF\ncG7DXJ3lvoRstGt8dfTWK4GTMHw5btsKmLKEMg40+xc0QNp7b1+EqR7v7kmW\nIeaGQA4uwSzpQTJZDzOIaI3fPef2cJLyMij+pJK93VAyvAT8CAO5EYy6LNqt\nNoQRF6Bs76Et2EqYwtRpfgCd1AM4ui9QZfG/PKitKFN9AID4H4Kza74Vizum\nJvbx\r\n=94qt\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.7.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.288096b9","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.288096b9","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.288096b9_1532549222520_0.5617564905627423","host":"s3://npm-registry-packages"}},"0.2.0-alpha.0874d73b":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.0874d73b","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.0874d73b","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"eabb35a99bf7eb33920a128107b06b33e6870ff7","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.0874d73b.tgz","fileCount":156,"integrity":"sha512-r7z6NGZkF95aaYhe2Eta2dIsxTey6jPIBi2M0DF348zLZOivEqqzJt3AR/HLKq8qRR+3XDZz2jK2s3oeH32akA==","signatures":[{"sig":"MEUCIEbVIC7tyaPmnxO2MlrmTNU/TBBEon0xmjvbgLfPSuRKAiEA/rp5Mn/CWDX/rXrUgZuDwOTb29cgcH30oFNEMamO7KM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310618,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbWzQPCRA9TVsSAnZWagAAVbQP/2cqKtTpZ1PiX6qicGEM\nRTdTLCECsSznJjrxqY9+lfqwNP1WslT6lgs6k4Mda43xY2meV6LND4rARzTM\nKg5AiozU+JmDImG4k6UQW/jcZb+P2ZeMZKiCiWavL0qULi4VmdUB1Ss4vPDs\nwOXG85h04U6ef3d7DTxTJkq5cUHQaQDFL2toetIxtqxPzOr4EXVVolqyEvw/\nJMuIExCcT3RNl+uFxiGDp1wz2XpWeFoU8031Q+D5PuKZEAx/ghsU6biIdj57\nzWxF81njd057CBMUXxBnNz3EDqHjHYaEOskn8kDFddLAcOyrBh8ZXyTztKuH\nhOYwvJKSEpahWj+0x+lGiYPyX1Qr7iWQrNQxiiP0ZkJ7Uc+BbHQGNSZ/HBdk\nbH/ouKrtNpjd4kmd8oi52eERgvAGAVuVCyS9GVmyouvir7k3r0QmcbggK4jE\nFMq0lJk6ZQnmSK2YtjbXgZbnQU8MuqmQOfY1kfJ/4qrv+JiKa4r4f0dpRjWQ\nflhn70P7OUimg0bZOnFYTdp3lTU7vC+U7gtCz6wqUYAW0bdpTh9/jCl6Dx8E\ntsdfCRW3w7CAW/E1gMXS7SWNZqvMdNQNt2tvsUOP9Ec0eoK6Q1KU+xhx0fDo\n+2OIO6Iwmo8K7Q5tLoEDtqA1fVP6l+4S23lnG2Ln/fGRUIlizvjIbuKIsob3\nl/IL\r\n=CHRk\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.7.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.0874d73b","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.0874d73b","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.0874d73b_1532703758228_0.5555189698405909","host":"s3://npm-registry-packages"}},"0.2.0-alpha.a84e12cd":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.a84e12cd","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.a84e12cd","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"b1614cbbe8bc1839956dcfeb01512c29f623d010","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.a84e12cd.tgz","fileCount":156,"integrity":"sha512-QJ2AiH+wttLfxhRiHMwE5Okx+S99ejM+XD3tsboJtYvLmW7EODVTUclaPfVVC+ZTKHPYTg2ZGE8BROQcnqDSwA==","signatures":[{"sig":"MEUCIQDCxJfr1detvxlxDsVVCDB9/YwN7uRsgYxjU08GfVzFFgIgUxZi46t6+hkzh+KzWZWQY6/eWkfho0hFUb9vbVu+KL0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310614,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbWz82CRA9TVsSAnZWagAAwK8P/RRDQoWY5WRtaWVLOMup\nULMrfQ72efNdS6RhHTBB1G7nME0LMWTThfnaGBrecC1MIQUamJk0yWLYM9sa\nwhThXYo1FdQ5dEPhT4WEvEN9zr8FZ/TFgP7tslhnEdp25x9kbwPBs7yjzM00\nkurMsXVH1tXzaJVjFVV9UGFmnn6dasSml1x8WrxZTar+imOOhwDmGtVdEsSS\n9cXa+9Ok6AGi/8T9HFGWXuJTv6sb9yKcc3983uNFHPp+t9judwQFfONS/Iom\nP6h1GhTP4sH3n6XDT2JfJQyLfTZf5RlvbD0X2xIGcIZRQzqT3dFPUJppmEpo\nmNEfQQO00e5QtK2pUSO67tyHOeEK6W7LbssIrkeAlLB0QKqZQtVq78GZ/W9f\nS4HJBIH7t+GYteAMRr6sdDY4FzAYZYwNG3GzX5p/ktZLgzHEjvdZAM/HDpO+\nCwZyc6yAredheptp4xk3ciHMdCiWlJWo3Af8rI+ZJl6g+Cx0VzYlLItUdpdr\nfxBp8Jj+c6gAp8FNHs/K9uiG0ZE1TUIwEeajdHL/zkRzdOP+EosnOxAFCfns\n+jnQtLjNALPwRmyodPric5wNJZmsExSIt/6DwmTNUbQYKFLZDNXCR5eO2+HO\n+TFGL52k5LnzftloXTSmtpV0lELbkgv3nlgEAOTjwpu8nyTDLC2UaXtc3iHo\n/vOV\r\n=QWMv\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.7.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.a84e12cd","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.a84e12cd","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.a84e12cd_1532706614511_0.5271283655120629","host":"s3://npm-registry-packages"}},"0.2.0-alpha.b4a85e8a":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.b4a85e8a","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.b4a85e8a","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"0ce7ddc0d012466124a0433f36e5cee3741499a5","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.b4a85e8a.tgz","fileCount":156,"integrity":"sha512-d+sygQpIjZHmlW8pMWIIngGHgG4CasR1U80KtuNtWVgIol7ct5ooYfsUjkNV9U8RLFSs+/66XBorVBTNveqV8g==","signatures":[{"sig":"MEUCIDUTbxxQCsF/VbkTM6ukVcupWGUctSUpkoDBPDtawxOEAiEAmIn2VE8yTZDcogKjQ7E5Y5J7ZCe75FOvsGJQXshr72I=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310596,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbW1sQCRA9TVsSAnZWagAAkD0QAJeXRoydp8kDLrsnR7i0\nFdYMN55v8/7OWCVWlCDHO3ef3yGA6SD5jdkEDIMCCRjlog9Hj3GbDDJ685DX\ntOnO3bYuSRd2qFNDtap5hsaWzTZ4UNP8Qwl2f/oj9YaKMSeBiNIQjnoH2r1w\na16+8s+2y/YZHpfsMtVuzG4CXV7yh6HG8UWagaijBoEhTPwg6YTkpOgn9xGs\n2ERDMicv/x3wL/dTDXshBqByXxL4+Ss1vabbWz3TpiNBbAFCt6AdquJg4lJl\n17/be5zjOKibCO6pjgRv3oj/K/BlLb44elsDWbW8TqTkQXFutiTlOCIwQWqa\nwwYiQW2YDzkO+0CukNNt2xC+8IMaqJaZ6HYUB7Y26yTPPSlu+yuBSCK7UcU0\n+oiCqplDyeaP2fT99dv6x7S6yaG6XxZUxIayFTJFnuVJkJRWJFT6fUr2oDwb\n5nFe2dTqN2T/oDl22SgL6kNv+sIrqpmrLzIfcIo8mVTDp3ixuCqgo2yOXdFP\npq3nfgJq91zqajkm0JULK5syJZ8IlCHcc9ZHFUEuw3fdzBCJblK6U87ZS5Nx\nsX8LDJ0zVjAtu7OT4/g7V7WXw6VupBesI/nfAbLJ1AOU2OLd5fzgZNZuzVEB\n8ErIzM+sKp7VYd1/M3cfY+PKHkZWJqp1AbtsAjuyWK5s2lbFpgzBxaKWrmn9\nWxgj\r\n=rycw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.7.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.b4a85e8a","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.b4a85e8a","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.b4a85e8a_1532713744152_0.3483243755837757","host":"s3://npm-registry-packages"}},"0.2.0-alpha.cd1cfac4":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.cd1cfac4","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.cd1cfac4","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"c1352f1c3320a983f531863cd2da769ac71aa5e9","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.cd1cfac4.tgz","fileCount":156,"integrity":"sha512-rUR1UC2w40gaf5/chwas+7j5k4EsV0YufYG7NRsCX7tvWYL52rdyUrvsithhlFFh5nvogXcpYLlBAyXZ3VrFSw==","signatures":[{"sig":"MEYCIQDrPZAvybBbUhAY/KIEG2zPTZLhlRG/oKN5uVAN0xioAgIhALMGpl+9beBQjjJ87r9TJv8or7NKFmg5hdwrmtCAsf31","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310591,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbW2DQCRA9TVsSAnZWagAA5HcP/3NXccFOWEO3cBNPdff1\nCtPE9pbuKwwLrdoHcpd+aGsOu6b2YGMb3RPE3xymK5AzJV7bnYW1hFFfWe1L\nRKhVQ21ZV2lRaszQbhWqCUzZOx9zTJyOHyZpXufEn+XauFcniQUus9JTDL3g\nYjjIDfgvPtVZycsCsmy84PHQKGkG2DB9yND5QGZCYHLFkg493aDcTb0DovFS\nxWfWG9UUrlCQKZHoszmRfkXwYEWDHq6oEU+FGLRukswni9Fh82vMVMv3lv2q\nMs0hiB8gAoV2vHVFsfr8g5sNL6u0CUqpfGIQjixyltL3PJuEl7kAFLXU2ias\nkih6zlw+D1XPY1qbz3Dq/p16pzqxIR+9yqHek58hREb6NiHhYfPAM2UjF0xV\nWzuwaiNp4qMus5l/kz8pSVT0+7TMgnLarWrcp0VSKo0zPX2jQmgVRTRYdJZX\n+tfipog9c9FepOFnKTAG+zku0X7cwyxITWgpm2i7BDNBaGQvpQToqr09OoS8\njbRbh2yD1cZTtfhPej/PDREfgvUJDKNXAGDsjUe6Cy50uxoTCqORX8pWJ49q\noyIfz2kj6rjsZnIsmVKAH5JWWqVPdma/kgtDXmQZZ9dU8Ut0UITO4xC5EEsg\nIr+gyJOsoKlx2LwSoMdTym51vpKroBQ0CO88kBCULCgb25PskBPprEAD3pJR\nWQO7\r\n=HyHE\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.7.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.cd1cfac4","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.cd1cfac4","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.cd1cfac4_1532715216759_0.837243319102337","host":"s3://npm-registry-packages"}},"0.2.0-alpha.46afc872":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.46afc872","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.46afc872","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"720f85f5ad32f5a47885e20e73ee2ac84d32d554","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.46afc872.tgz","fileCount":156,"integrity":"sha512-LJvvNEWQEZ7yuez8Aj03XdazBBnTWDv4OUtnBawLdPx6a29APa5nN3v+wT2ohkGySAZu2nuQRtYh5VFlLZJsrA==","signatures":[{"sig":"MEYCIQC4ySQ4tXcOHGZU+qbG0SU+Z6nwABc1gTCLy+ITXSDqBAIhAI+xvR+YAXoq8toKPXUm5GZZmh87+IXesxSNNjdF6LuT","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310610,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbW2pjCRA9TVsSAnZWagAAmTEP/iBEq/k9ZdEX62fuIqQ3\nuOoWz7RH9LYfo10VgMJUYU73+EyhVSNGQJAJ4+7Xide/22xJEI19jhAFEyDJ\n6qBZpZM/zKCVEQtBPecW83b0Ks+N3S6IuE1hlzle2BwxVS1JVRAF5h6nYVHk\ns9tzlKu3+Jt3nzhld3y7Uj6jA4WMlzyH4FIvpmaqHDe3zxG1HKaLc6VPSQHP\nOXTONcwI1Qwa+iwB6tawbXt2DY7m3Ye4l4GLSL9bkWwcyRhDoWyYnzSDho09\n8ILPMCVKyYzGI2n9nrXtpU6zVlhphW6ZGs4//iYRLMvri/DJDCDevgma9878\ndWhVbYC5EdV/nAOZ4JYCt70j4iM/oJq60H7PWKyxyILQ6JhlZUSwr/xHHRFD\nwu+4o2fBjgxrM41xZhLzOojWXQkFdYfY1XeQG0Xu8EKkbQWxupU4cGIYgG3g\nNx7WwOxo5PMqDpxc/InQLnJtaw2gkXHLJdvZBwOAWxDwnT+tRdEOdeDdvRJH\nUfliArz1JFMIkzmUx+kIfpMedIDkm/SyD+QXVRf4anuumh3t5JLk0hSjjtWQ\naQrQR3fwbHaqmUDBXMNeo9fGvkt2GrJ9j7zsPaquvVDGIbzkBue8V3T48keq\n/XOhcBqbJ408tpxDcNJmCfjguwKG4rJCMHm0Vb5Juid0da1Ug8jJ1Fyk2V3f\nYjZH\r\n=sQ0I\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.7.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.46afc872","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.46afc872","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.46afc872_1532717667463_0.39173555515610925","host":"s3://npm-registry-packages"}},"0.2.0-alpha.d9a56009":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.d9a56009","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.d9a56009","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"60b5cec80830645da8c7c563b44c03b17bf15d3c","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.d9a56009.tgz","fileCount":156,"integrity":"sha512-B5XMatKV4+WqdVQyXGkkJdzxO6MGOYhkJrtGjHPyXwPPM+0KDhGasOey7oiqajJQ/lYgrqnndF4+qrrPcUeEGw==","signatures":[{"sig":"MEUCIFmokyurIPMmIXVG4mVRjJ0Zc1fEir5UUoT0lT6acJ57AiEA0wzcuL6tbSWf9Bg6MxQGZ3ltEcyQ5gF1LNay9BXV588=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310600,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbW2/JCRA9TVsSAnZWagAAvKcP/3w+xpzwr4qUA4CkYg4h\nNdjHOzFiYMkKyJ/RXNAkkHMYx8V2GJrdUV2rTEpc+O64DVdGd68pNza+VWQ6\nYaGnV+27ccRqq1q24IqFMRbXFtyIfXhF1YaNdcHh9l5JUNp+CXLj3UnmH4pC\nm/32WaXRJJ/GY6uTbzl0d5nFsOTvnIgAGc4gSqSHicjhRGVA/yjRel+VeWd4\nnxarbq3DWAW0+jsPgTAClasRt1/xTT+7NGwGaOv0+hvd7FdgRJwY9I0i/9FN\ne6lsx6CM2cvfM3f2x10zGnKFThTbNl6S5GEiKQz8g3sv3i+opycgMDX1Gko3\n9DZvq9yrDi2rGqcw6TlZxubNPcm8qeGyJJCLFtbPGg/IYlcDuPdbj0A0ob8b\n4y6dvpXDRZct7Vdfr9zjaaDAtMWINQytnquOwRsIxlE+aT64rNzEA5fU90iS\nkEJFC1KRUbrCmcM+yCOlmSk0Aq3LEvN/m4P0++esWnRfa3wB+XZRjJCkTsHr\ny1XwnPWVPoGS6MQPDGTUhvavzsUUqUOqNQ3CNoXoVFUH2vJEsYxtlhWSJzSQ\n8YIS80aCN1AwWdxs8t3stU2Do8N45ic/gOdPH0IT69N/6WkNqCh12OuARS8x\njZ1jP/RxNudxj7LjN5M9zZNnq3oH4T5OTNEpYuA9CBQLFbkTwcVZ2Qd8u9HJ\nGYuI\r\n=qABJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.7.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.d9a56009","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.d9a56009","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.d9a56009_1532719049310_0.4098724308503321","host":"s3://npm-registry-packages"}},"0.2.0-alpha.50d491f0":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.50d491f0","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.50d491f0","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"c8d20e7dd83b87094fb121d4b5b3bc6a35427bcd","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.50d491f0.tgz","fileCount":156,"integrity":"sha512-eFTN4T9xXiSffKxBg6hlTzUnPqoXiu07M9JaRXyvVAAxwN0lj6aSRK2h1BfZW9vG997uLrEP4P0ELkyViYJiQA==","signatures":[{"sig":"MEYCIQD9PJZGSm2no1zRz1GeddNKcGijvy9+Qu3+jSMUjWlNIgIhAIKds3Daj63IdkKjtxZZ1xG3+VskpsAY7tz4ozpXLibu","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310605,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbW3WxCRA9TVsSAnZWagAAPKcP/j+FwcoH0eRrzomNdqvn\ncoHnsrWvGUgbMgPyCgxv7x57gM6q7tq0X8PNbbRFlcxxJpAdR5ra4BMrOuqs\nCF8T7fYpoHRK8dleL4x6obKrock5jtl854ps/NivvcRB1e10eRbxrMVidvXT\n8psJWaDeEbVCQtzWGkVYyCbCC25W2NrHWUWBKclbfpZ44pKO92oRdQc6eMaE\nAJnuk9SP6vlCOyUX5PzF2lNc4LoHBs8SgSSk0k38Eu4GZ0b/oXG5faVxz8K8\nmJrnHLyvpP7CbaXdCePzgIJBgi0u1wCHfU2oESD52rJH2O70WSi8BJ9CpU7u\nYqrHTpNpBuONFhRSUrrIo7tA4f29UO+oxMPs1NFLkx96yTOGpIZlQmoDiQsp\ng0xYsgmK1HBBKC1OjEgkZZVh34WLbUomoor+3YDIwObM6qzFrAxT7BA/rurd\nXyqTJGXHVPmOkPonCf7L2DQh5ywAppXA65ojGaX3qGbFOkJCQQ6Tw3jDUlM3\nS5DV0N009FZp3pH5/RDYluRNyUiJbQ/qAQ6i11WwNmxlmtQR/5+1qC9I+Fbt\nluQ8CPpoKtyuJYdxN6eys5WKB+efxs6BzymQVs3AMuuOYASmFu24z0ydY7eh\nbYl1Gmwv8UhGeezG8PEbQd4hEeoPF/ye5UZHs/1QR7WwjvsvJinNDqnV0jCb\nvfMe\r\n=BTqP\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.7.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.50d491f0","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.50d491f0","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.50d491f0_1532720561347_0.3480181204908608","host":"s3://npm-registry-packages"}},"0.2.0-alpha.5a439850":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.5a439850","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.5a439850","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"98fdce1e6cfade28ab7f65ea2c6fa8702fe8cd24","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.5a439850.tgz","fileCount":156,"integrity":"sha512-gZj6CS8G5W06iecIG33iXMsu0R2hjJ1eyDw7Xpu8BbOcL4M8rZnJs3jtxcZmOg3LweKInDcytz0pIcyTf/vggA==","signatures":[{"sig":"MEUCIQD49Cfv3FJRw+VhK+ML78aG/c8/LERjx5MCpEPs/HDXZAIgKl6fPk+GgSceKIkqxlTUbLFJF1dCXcH1nX3L8mQlWyk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310780,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbW4UDCRA9TVsSAnZWagAAOYcP/RMOz6YcEIXx+47RepFJ\niVhj9O44K3UU5SW33NrC18Hzoh0YQMDhe6yK44wQBDvHasHjcGCwCAnk2EZP\n1NcQTafcO3DKyzz9fD2iTn8L21TrEA+nQ834Ky2H2NLX2lTbRRGgxvc/enMv\n4ZmeKLA9/5+C+PmMAjtrabrqqwiPUTMEx7MpYQ83hy2seAsa1rWRJAht5YVQ\ndF7+ShRy3Ez7WbVedmbCLXROZRLbzgCuCYN0yNOoUkjWxPp3kOwRmgfHkJJO\n1KDrCph/eaEI4i+fv6yEjaJ55UZenCi2lz2898Gx7I5TsmG/eTPGqHMf1txQ\ng9Etaa8Sxn3gU4WiR+Vw8w3ExM8C8YligKnAm8keUWu7GitFV+HtTq3fNeLU\nDngs59UT/mqpUshGRFKN62dmbaaz+wDtoyweEDvSLliKKMdgWrYCku985rPD\ne/qAVsWy0mkaVMcp6aQdlnmj41l0YeI+u6us7qlZP/Gl+Bj9NJBSpWdchZPV\naOJVtwBaqYU8Yu4W0eS3nsO+tRgsS+GvzqCMf7zVKaPz1djDWohnT7BwOJiD\nRRYjSRZvJ3vFExbjO3iwtwMnOCUPGo7wlhve6e+taxrIFabzhyPxyAkwpaJ2\njtLKTufqwO5wdeAfH9Nqvnj0b33tjRfHtu0mIvJ4/5nS+p64w98ZWLuZJPR6\n96fA\r\n=lAHr\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.7.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.5a439850","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.5a439850","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.5a439850_1532724482946_0.9526112796285655","host":"s3://npm-registry-packages"}},"0.2.0-alpha.44a6626d":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.44a6626d","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.44a6626d","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"bcb160cf094a8f959f5ae443bcdbc325c2e1c81f","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.44a6626d.tgz","fileCount":156,"integrity":"sha512-+rRaJeKMN++j6pJUaLDFJR+tZoZNy75BnbbFIvxLPy91+P+STKM+z/JeCpYOWETxlW7lKHkhIJAH30kMao9bfw==","signatures":[{"sig":"MEQCIByXIMXL3ooLmw7wmFhpehMWLHfJzGPxivsAmg10+vAUAiBftBqwr88sVWGpLLveGTUISCrhE04R5tlmIPWBWQ1wvQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310596,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbX1xyCRA9TVsSAnZWagAApPMQAJPjFOsxOGzfW5LihGDI\nbXHVS0qnI9Wqbvb7QFI7zxwJ8qMjRoTzmLsqfWoyXjkB02nhE7SOI/R57hPQ\npf/yTC6Js8TkLHLoQRYvj0vOklUZNfLIQtj7yqKVXdafIQYlX+WnRq0j3vgn\nedig/zjX8jgFbNurArIAn/KEC71gLEPLSR6uTcI7DLW+klRJbNWAqnUmWLVx\nyDG0UUf4q448IqV/f7aEit8TjzVBMswr5bTsGCfoBiJLcNN+87E5YvHCw3Bs\nno4NTQ21WPcuzJqHFzGBvlke/SfCK35mpz1ltzDOBIo9YJUC15J/tpvLF+Hx\nQ1hx2Zu3XHmiz2NHKtpQRmpN+FmGV/1ihaUhf6AFneVtarntD/GSn2Fw/3NR\ntrBr7UYb25XJZawKvnV++u58rskKTldPpDEQGBbmmXE5BESpvM/yx16RIZTp\nu3Y+FHfnxhZwyVQL0DwnIKpEOgNMLSnsZee0b+GqdtlGePn3NRcyoTx9jl6P\nynaL1ylo7Zcep7TNwX+v9s8vAzSx5CI1cZgeKiuqb/V5SriV4KZBtpISt6MY\nFZi0deP0NkKS4fmNhBCaxOj/md0A3IxOumrv9YGGGDioyVV0nHTQQ0MCSXBO\n4ijKxw54G4/oEtOTj/GMwyZWpLM6/mbOUOhuQ3VyRsasVa2oeuJ6oCp6icCr\nNhqU\r\n=1NG4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.7.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.44a6626d","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.44a6626d","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.44a6626d_1532976242054_0.09732770737784424","host":"s3://npm-registry-packages"}},"0.2.0-alpha.72c610d6":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.72c610d6","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.72c610d6","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"c048e52e521038107a260fd3f7e68246c53436a4","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.72c610d6.tgz","fileCount":156,"integrity":"sha512-UnZ20X5vHm/xP9YsrkAkNSEZ47zYQtQujrxYjMekKaEveq/i26z2yJRFjjb+30o7rFL3kxej05//2sgqpEygPQ==","signatures":[{"sig":"MEQCIB4dku4b/2aBvVEZg2kaTKmKe9LBBIAara+58rV2QYpNAiB07w8pG8lnbi8uvfFzMZULTUwSn0SyIBLkTImQzRttew==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310469,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbYKtYCRA9TVsSAnZWagAA1aYP/051GrS6B83RLlvV73CT\nT5WJG8i0YR9h5Ojf49EXul3XUCdz2Ww88iDbuxPOiAl1/Sw5d1pLjsa6Ugc3\nSUgXIRPyRk0fqCXaB8jlTo02xFVvhc96SfJHUCYSTNuAsYSbflzYFa1rNoej\n/FJ0bTFFdlZquZ8+X+B5XEza4cJq53275yeCjenxI8H3bcInjdA/3PVxPMV/\nN/WyzFyAlGidaYtFykaZ0YWamHmzskomuO/86wacLd9d+PBGMp0O3jMGOBnP\nPXBM0yw6WJiCLl9xAbROPZlZP0Kd4z+DN8Sg5GIgUZJhFVqol9YUmsSm5udS\nVAvK+wqoOtMPEpd5S5OqWeyT+830HxiiCCBjr0gFmQR8PTdZzYvyEMRXiJS0\nIXIjVtPAmRNBIlKvXzDCQLXHJeKQjsLhN2dQpYdjqaBw1qW5Hmcblm5QDUUQ\ncdmfOgwnUi2QlbEf6xoQboqqil0CcCFDYn8qyRBJ0DbHxuTfJi+R/YXQ9hwG\n1DpFmsthrzkMJGnOILbgt6Fv4GyMhfjp2FOddjzQclcqehRPXIZ7azqg5pt2\nTt/frlOAGYRWPUgAuVjHeWv9hKyar8i2yErvUCYdKzKGor4raks/ZFt6gUPe\n4ABKrYPZ130jLZegveZoAJ+Lhb5Sg3frN+CIVga2TvlNLXzd3w2MzJ/Px8gI\nXBtm\r\n=iKLA\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.7.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.72c610d6","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.72c610d6","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.72c610d6_1533061976400_0.17137417036245428","host":"s3://npm-registry-packages"}},"0.2.0-alpha.700551d9":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.700551d9","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.700551d9","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"270dfe34ed1b78dc306eb10594bedab711c31610","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.700551d9.tgz","fileCount":156,"integrity":"sha512-+fCre5RsMxXTUICuttAQokndVPtnJ7ELq7gWZ0JB8qxs4Ch4tSofBZc1qWr7KNHvAKqhAPt+5pmhBNiyFvaPBA==","signatures":[{"sig":"MEUCIFhPOL8nSmOdyb4ymeaHughL0cloR4IxV5vDxTMsyKOAAiEAk1ohvjTeNWe5pzYcwBKJ2uxoMCNe5U18yHRPxsrdFbI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310469,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbYK2gCRA9TVsSAnZWagAA8J0QAJn+j2k/Iq2oZ5Q0P5uZ\nM8YnO271lOZtWC9N0lEqD0EtHtL9G/O2QBWqbpsyTZatihUgdxWn2qoLdPX8\nihU4IRQCvXFRfeYWPTS17OjypTCIvTLEp9Lpq66oj8D9vGsJiri5Z2KUrt7m\nk3xcGyU9EEcerFUO3tfnmNQh7UuqyeLHmwW1HMIoOTPMGic12bpvvyZ93x3j\nT91C7qBTxSy0kc/50o5oC36LqJsYy1hBcNHFDRYjz8ZDuURT9m8iUafd6K0u\nE0kaYGRcMLbDg3eFs/nIUzhzzuJpwSru644NTlIpo459TJDcX1xWs+6ZSsR3\ndE3Q7C2oi27ZaUL+qPSZUdH8W5jtO7zvHRUBtpT1DO8vBXATmzkTzYlo/jRj\nee3lTsPJUPM1pJerJSRywG3z09v1a7OnvdhhiQgnXK9skxrjKWVhYakiQZVZ\njf+FPRykyC+7+4M9MyS631p5Mt5XI1wr39FDRkJlpNmWctozOX9VFLT6G8B6\nZpUUQGRr12B5xmVuogR18pumD8cAduK+DJXz9qjnqxfwV5FC3hK+MTAIEA7f\nBONPq47OMNt6GR76CvwvYvV0XJxLpT+Coat0y01kcJW0CAgyFDSwqsnebDxJ\n+eTVPexpvJft4EamriBXiHWgVpwbCI6cuWDR/tTgsZ+GnCT1n0GzIgkkXbXg\nvQ3R\r\n=U66S\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.7.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.700551d9","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.700551d9","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.700551d9_1533062560478_0.988020128054917","host":"s3://npm-registry-packages"}},"0.2.0-alpha.b64e30dd":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.b64e30dd","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.b64e30dd","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"3ef19e12735f2fe6d306c090bffb933dbaba8402","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.b64e30dd.tgz","fileCount":156,"integrity":"sha512-QFxqsJL0YNPJD9fN84oUuf0meixZzz88IsR/4Vhiz3Skeemi6AneOEZiv1m+i4V1q1hXo3AipkyXuODM+DlXSg==","signatures":[{"sig":"MEQCIE5rhW4kkSVdPkunpuvxQZJSiiXR/xSTDTbh4wn0xja/AiAaz40h5acMtQ3/dmnWeYkHw9P4ju9Qx73bQQJKGeJUJQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310469,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbYMckCRA9TVsSAnZWagAA8AAP/2X4jsAJvy+Ym3sMrNPI\nZX2zle1Tzj04SwGQ4bEtdGI3EBFi9BWU61b7j1+WtpUR0vowuBwHHhMARb2G\nV6PtMv8Rf18fCuz9TfQ3cn+QvT8ncuLL+HQeA7AR+bIvJhis5E5tZ/E8M8On\nbpqzAgI94mvOa6hlvlW27GZx2Ov4fIX1eHU+C5X82Oe2KRBkS3+E23G2Aytx\nhW/4/2fSiF/tVKC6rVDLBVcWuDCHIFpUzQODgW06V4Z98jYkkrow0eME6xAL\nwEKzrwNkYCfuoq/eJO5KzOF0/BR8jdQqS5DQSno9Fn72iX7GBfpDqp7D0oCq\ncZVXNxN77KqpC7utUsv8U5aLyIBXlgRrMfZlX4nIrzZgkdA8H0GdmJu+QJ6o\nmXI4xmwROJGm6VGlDXKEutKz81v9eMpbVDjSjjMqsHJQOoBdBKhabcL21PbD\nCf4lO4aAq5uupRpfdf+CO4Z/JGGz8xbvoeuasO2bYHp7l2TVuX2akTVR5C5I\n7u81pCf8Gl6VuqQqiseO14tsFjKeYqoUna7aSh0fsYcYqaU0tD3G4GCKxXQB\nOx9Ku8JdxjlB/WQbSoVIsEJN9442PIOE6IfRanpzDkz2cywZje1db8q7N8QU\ntv06c45WoEjmLvnPxsBCrtug5OWt1p2KInGJEBtoWUv4W1tQ0YZIrIFmGiyy\nhG8K\r\n=SvOi\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.7.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.b64e30dd","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.b64e30dd","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.b64e30dd_1533069092465_0.0692419550684682","host":"s3://npm-registry-packages"}},"0.2.0-alpha.0b0dd155":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.0b0dd155","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.0b0dd155","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"929c355cf7ff1d2224999cf23a8eea69f196253d","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.0b0dd155.tgz","fileCount":156,"integrity":"sha512-QO8Dr5eRAOL/lKGbUFrhzSxQjSZyXtohgV4Qn38bYGufCLOJznbQfnKqkxg0Typ78NVEqQAyqd8ym+eFAqRv5Q==","signatures":[{"sig":"MEUCIQDyt9+ALPsW0JHFKQ8T4+PM6ITm9RlDP2625CX0dcEs/gIgLL2zYXh9K2rcx3QuEXCRY4DdGE3hEu7lzIQhCvECwu8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310607,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbYdBcCRA9TVsSAnZWagAAzDEP/3K2TDF+idyTOGOT/sYR\neMf06uR5RZa+xSa5cfZXx7q8sn1MehBN0XFPTGQktjC2oyX1JVfA1m6t8V3v\n7txoMp/+uCmHHcC2VE2dyh2tSSKM3yazmVInCLfkCLOpAuuwU5Qhj6Gpc7II\nrNQCVH/rkjs/VG+9SCjF/UtL7eUJmXbQaZdLH/7qmUmOPRHuuY1HeBt/ewCE\n2k91Ml27iJX3IvpW7WGxY+rdgdAYShwZe8kEqc8kXdhfRRVyheKa70sLQZ74\n1Lv4d66BVWmlhkSHc0JAK9MPcQ2vWnwTi5iWNzr3XRXLEJBzmMSUT5OwCdU2\nMT6iIuuJP7OMS8AC2LYmurHwqricms+0wjmyYdkSe3d9uhqY68HpwFnNIlWA\nTRSus09rrbwIIkFNkWNpe8zGShlhr+10gb0nolSLdBmtkzN8WqgdvLPIlV40\nYyFAxHiQPV4i/rUt0p7B1akN3rD6FJZE1LnSD/WbqBO0v7rcPbp0sjid3Gvq\nAMrQOWExroWTrvP3LojwHMg3MhuQ2kQX4dJ4tpqpCgF5p03IWoH58mzvQE35\nw+4AZNuPu3+CZDEzrKoqGugoz3pobbd9ZTt+KhJUVucjmJmKTDp7uIkLyvd4\nJwQLR/4VRr2RuRUotu+sp/el+v/KM4RKWq7WgZ39xpscCWi+LsO2PdieFU+B\nwV2r\r\n=0B3l\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.7.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.0b0dd155","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.0b0dd155","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.0b0dd155_1533136987928_0.6182621448585777","host":"s3://npm-registry-packages"}},"0.2.0-alpha.c0ceb59d":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.c0ceb59d","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.c0ceb59d","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"f5fe0a94d2b21ae7cdc3798f65da8e43e00d302b","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.c0ceb59d.tgz","fileCount":156,"integrity":"sha512-dUuVRRiiPVzim7f6H5z33xjuIClO0zJZn6EvL201sWU1HN5gx+H6M1TB+FgyzdPaw3r/HiaNhv1eeDX83JCG4Q==","signatures":[{"sig":"MEUCIBpjrWVvK4EKAXkZNGUTrRZatc4KmOmE1r4Kj0AjeU1jAiEAgYsJJAA4tnIp7hsGDNjrdzTFmB/XbNl3HU53+Ou21OY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310604,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbYeW6CRA9TVsSAnZWagAA2d4QAJa0c+lkqrRiutCIdn2P\nA/qZN5f+eW40kDyoCQZ8QsPnDLQXzkcmwEzhq8CkD2tsnnBu204LLX3/H5Ba\nA59S0+IiTaeJ9xNHyqGH9erkKFPtTgU3s7kXpHxBT3/Twk/hy7yFVYOghJxG\nPqKly5e7Ms0SBw/RfuOfCNvQZ6YZEhltY8wWR9mBJc+Zkr4vTj7uF4jlc9YV\n5dpF77ApLfsEw3zdO6x6R7fH+jptQ+knv6TmC1fo+X8rZp94yT8lIryPM2do\n2wTHHEEaGw9qNgklDg6/42nIK+nz4poYj9F+yf57kwP64Orve5pe/GYD9s/k\nEiG3ZFXH/GBoETfG5xAoR0vZF1v+gYqg2WVvN2SJXtp660y9YbBSKSdX5J4x\nChk+1GHEjkgFwIl4ZVE1VznXvPZ5zZaQ6EkJXjpugVLsqZ9WAWU+jkBUcreu\nxwxO1n1wXdQzimmrQ0BMASTLwGlqqReG3eMYsv6K89pSPlqF033PJTasOXEo\nO1tiBXHASdYQFvn/Y0lFpMZhpkXqit2teGU/GY7EUfi+rTPrCuMZ/w2p9l54\n8G5tXOmk9xot4ka92LSo7DFOBVPS214i5C9nso5ePXjf0wU6ZShBm2bBt1i1\necoC/YJNP42p7ld2PAk8daMX19FJoD+7Putt4b3CrTgUJvZvs4qkP2hmZVJg\nX7uX\r\n=Xiyi\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.7.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.c0ceb59d","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.c0ceb59d","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.c0ceb59d_1533142458556_0.9936333956279977","host":"s3://npm-registry-packages"}},"0.2.0-alpha.442ed60e":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.442ed60e","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.442ed60e","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"429f7f16b52f9336f633a73b9a033d441fffe20b","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.442ed60e.tgz","fileCount":156,"integrity":"sha512-rhc6diHu0G5akzIJUkg8UeUQVOe9GuPYXFTJk8hBD8ofAhZyCQ+aqdD+iCwYq8nnU21Uw8iqGPBQfM5VifD8jQ==","signatures":[{"sig":"MEQCIGIiowhtJvsF33wIhomBlcItAJ8to7Ec7/yngDs6rcoeAiBp+uGBB+py46By9VE+T3gp2s+SlLRnuefTB1d8qfmHeg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310803,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbYe4BCRA9TVsSAnZWagAAnH0QAJ8VVJ+u/BPwwS1bxvCf\nU90P7onYqPSZFzWTenxUs3UXb68eO7ANJPKpRiirEk38Tc0GjLqE4hMMiJJJ\nLSj8JTFUwZZngX6vkis1e4ERnsSRp/HcczhxkwSsvOiLqBFErxpqY0TdeRCR\njv/Y3Rt/7GlqgPzh1+BokvWtdZvbLQc019u4nWZzep27IJiSwgHQNiBFIHJr\nXj3iQY8aS5zDRa981XnJhi4TVWr8v+SDEdC5LPSWkjkqWiIyZG5LL99sdlgx\nWWRe4foYtvXK6ntxb3dhcfmOAVXhmtdd3DwKklYMmvTZD8yfhvaM12pz1Fx7\nGPYvCoRXjv+IQ5dPDZqlti8FowI6mtZd2C+PL0QrlSGdaVA7WtIItUAoDwrN\nMndIfKELyXTpNd4BjvRaDSfgpVbDezpbvOcAMppw/AA2KruOCTKR2KtbYip2\nzzt5XypuelFSGcUlKYEc7LfpR6mZqEfk3Kq2sEJ6PXph2DyVTuff4wXxuVbJ\nwLemyDiceDOSg3s6Qwdsyg/pHGlKkU9INwn8bS27gKRWEEn9Hm0zRJgja70a\nNuS8HVLEcvoKUynIxttH9mmlGEcbPf7k/i1hpxlecf49T53yhrFEpnGvRzCo\nWFD9mMmOJ6yMLNZfrUHU++DS3RiULbs/v8HrJImeSe/iz7cazYmzVytbk5lN\n4zDi\r\n=Zujn\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.7.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.442ed60e","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.442ed60e","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.442ed60e_1533144576822_0.5146796863489522","host":"s3://npm-registry-packages"}},"0.2.0-alpha.3d308725":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.3d308725","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.3d308725","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"80cab277ae88f426c9d4ea721e6b960b5b4e14fe","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.3d308725.tgz","fileCount":156,"integrity":"sha512-OyGBYRxcunL3ieU16bX44ps5//bfNJzekW2SVG1AoKbQMkAPQDIGfchYzrG/Oiu6RE4ofyqgwGLlkEoXqa5nMA==","signatures":[{"sig":"MEUCIQDhfm6iEAKYJP0uQR+zZmRi0aNYE8bjX05+tbtylUM3FwIgMe6NAtqXG3sRKVlvYB87NfvVfJv1c9SqjSmzSYNOYu4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310469,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbYfhtCRA9TVsSAnZWagAABWwQAJoRN39gm1hqE+dZHNcH\nxMrGlQmHCnzT2yfzpBdIp0lH//X0CGKEAqlA5oMc6WvqGKtPvLFBdze60kmI\nM5IWHLyhl8vHgL/tA6lPNi139XaM7/MzoBUTOheC9NXpBWLp/cH1bHrGQYAx\nNLRKCjgmodL4mOMoPjGEdFjz2lhEaE/wHFrHhaWPRyNXrcegC51wcxoaYIYu\nscezA8v2Su1k+9qIZRdxWEjLVM1VWQoKoXLnnJM07D8DFfjciqnKWY5XJ17o\nD1K17JL776FDH3F1VqYwTSkwttgzzLkYEmpRh8aRNrLQhHDPw684S28ulymw\njLK/t9Iq7mPfOMwmXQ2DUnhO27RRFPz9qunBsLEMML6b/eJL2Mq1s3HtD+9E\nyKektoOxXzVhGJ82LjiYh1LlsgYVTDRkbdbs7vqqzl1gAFSAp49J0tgRxNbe\nqdh9XsqIwzlF/qw5mTG1R2ePT1fwe63QqQfnhtm+x5wAXpi4ezz1NnHEgM4e\nRsUmwepkv46h/7WuAAeARkynQ0NJTbaZm1C+fg+AaY3SSQDyIARIb77YWpai\nYpFb3WjtmDgIfeIKyrYhK0BLuHNrgbXHnk6l5cE/PbthQmpf+WknHIx6PNzc\n1WqkdW58+r5bFEasJjWjjvv2v6mIHoU0drz9iJthsXijZfOKYQfS+ji04Lh9\niSps\r\n=HhNZ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.7.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.3d308725","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.3d308725","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.3d308725_1533147245605_0.9464814546393192","host":"s3://npm-registry-packages"}},"0.2.0-alpha.a2323718":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.a2323718","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.a2323718","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"34b8f5fefb730babceed5a6934ead3924f6e9b69","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.a2323718.tgz","fileCount":156,"integrity":"sha512-CscS+i+ugv48yruvceSFdY1vI9RADVjaly71cNT+6vs3TG80x3FmAh+v3X+aAxdFb8JupqxVyZRQs54ia5KZBg==","signatures":[{"sig":"MEUCIQDUJb6GgJYAli+syR3QGETuBkTi3n8M2+6UDcOXO4bITQIgePlQjYLDWPmZkquAnkf1Z6IbX1ff4/tnnzp+3aMK9xo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310586,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbYgHuCRA9TVsSAnZWagAAFmQP/1VVhw6Y2Dw8HwnC+SKb\n0qAFcuEBlAby9vBcTaIN1Y8k/EcX9GQRg88Uhrvsy+JmzHLiI6Gtt/QwUFAP\nKXG5PU0LriBsVSuj82IRmeLuURw+nzOMBpaczJiuAZEk86KsohTPqUGfR4UM\nE+R8s2KRM0K/UVJ7GDlL61fV9C6WYkdnv8OXxEbfSRrEKTScucWMECzYz7nT\nCYWnuKHJHqk9A64sjPokUHPu6626KrvYELdDXjPy/llHGbE+9Fem/KGOiNMv\nDFiJZtmVoEOd6neDY5M5ccOpDhYtQpyxSJ5mLrj+F5Sz4u80DaBUA6mscjMZ\nMxoqNoZj2jYd/lYJgJrzcKgql9rIDsFvcK00GL3+aZqMTG7r6602y6v+EF8v\njcQYlqAVRl9p2paOjKq4m1+V7bJ8hlzVVXb7eCtPaIcfsZ4t+5RQCZKYKnxy\nXdcuPdaMlII/Uf0z+tR2JV3040b2bAr9IfACDBbEmIKy7AaV+J05PEJ6yR2w\nVLZSswv/v2SJjIccJM0+f/lYWgWyulvAj8CbKmfLQDKqdRfASXuOWjAbwAL/\nzjhFD71e7JaTzPz1k3l9ABuNb3pDdjIy76+p2h7Ry8SLYLBwZmq3Kin0p85u\n3D7QYQeJ+l74tPZdyy1j97vB1zzaYFBSDm6INvVBZbHue3t6TAIh+fE0OwYR\nO+Op\r\n=Uk/i\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.1.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.7.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.a2323718","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.a2323718","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.a2323718_1533149677992_0.6426962786720882","host":"s3://npm-registry-packages"}},"0.2.0-alpha.f33a6b0c":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.f33a6b0c","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.f33a6b0c","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"139b7f9dfe3cc4c04e26e0ea97c66266d812da93","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.f33a6b0c.tgz","fileCount":156,"integrity":"sha512-X4K8cromY2JrBM0tn3h1mlbKdsRU8iMIclQB4oYeg2NVYHYnj+sp/04q88Qpohik6Qr/oMlBx4hc5SpVHG34DA==","signatures":[{"sig":"MEYCIQDU+p0VhhS1054NDIVQHrDjxLCR/2MfQeeaOJd3VdsIUAIhAKKplLNhZ4Ck+MPNmrabWBRqHSrnU6wh+UXY2cMguy/q","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310610,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbYgtrCRA9TVsSAnZWagAAqYEP/3kF3fHaGiKOJInttFOx\nowM/4sfPU4UDT2VXtmARgjFriJBxosSXhoqCZ9Bpvdf/7Z8u+oSLn7KbP9o/\nFMIVeECJzRFJpz6TOyJ8+yf/OqVp9txosgTaVM0yV96e3RsrBhy6++vWxj/z\nN6eg4lKpVGmDH4a69dfYSjkImGueG0OsMKIzIUnAC6EmP68VpZOka//sDO9L\ntmHgYQBGX9C7asd9CsV58FVkmqgq6pMIHl4fB83eBQgw9YfUo8VRutNBjlIr\ngZ7s08ZT3E0594lOvmmXRb/bPsCvinQ/K8MB47+ko2BjtazEcKCSP6mjDghr\nmE+mZak74pBUUuIecc4Ex1UnN0mpvYtD/5LoCCbcxrLjnJSx6OR9jJMw2cK8\nc1aVd4oLs3t7vFAlmBU69QXsoq9idx+gANFB0B21ovyhHMM+A/etEj/ekXW+\nCmANXxrl32Epf9Wv8ST+LU1eTvyfM/l3LeatrXJg/7m7yeRDwWkE7lqdcjvR\n5uIv0cqetpKz1Q5TOAx8NchiXuthDRuWwE2nYhwi1VlHWanqmq2AVmnVSyGv\nTlQ2EMg0AVzoKpSF4/ksBCFAZmoIKicLqObBYbiinne5Tr/t624zQ8w5hOOs\ni9dnr2lt1IIOrE2iD+fAsoWGfbxTBFe/+fh+PF0gRGAiENz/UeCwJa/mRz8W\n1xry\r\n=PcAt\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.2.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.8.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.f33a6b0c","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.f33a6b0c","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.f33a6b0c_1533152106997_0.030593406863582695","host":"s3://npm-registry-packages"}},"0.2.0-alpha.f483bd88":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.f483bd88","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.f483bd88","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"baa2e588309ce9c6699e570740bc1d4ecc97c673","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.f483bd88.tgz","fileCount":156,"integrity":"sha512-aYq57yQxmNLIu8V6Gp7te+Ob2919gA5PcewBubwATKMp7S1pUM9dH2ibzVIwdrcvkCt3XosAHDw0b2llZ0K3kw==","signatures":[{"sig":"MEQCIAoukQ1da06g4kpXgb+i+0Mxs7dnSLbyFQnLJHH/gLzxAiBEtkITEz82f6FKCDoNHUEcgvxT/JrLhJoCo1zNd54nXg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310599,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbYhhYCRA9TVsSAnZWagAAptMQAISev5QMOPyXJysL94b8\nIn2g2yKP9ujHCr+FG8m+U3ePgy8r04xBDSwDNeajAOaOvC42DU5vXuAxdVqo\nBv+oKfULwR2CNfRBLBz/qYC/IKxEs1fdRQsoLXXnz+mPOJjOgaBbS/dyp8L+\nhf0ahlm+MBV7BQi9N9xkg06ndc6qQTeLQka4DG3Lt/CmMymVbuX44Ul9TfQA\nf30cSVIEP86/Ywaqtd8GQATRSCIPhUOLk8GDW0+2JLcARxYX0feNFT9saa5p\nx7jXqoRIF6Z3HIGZO4U+LFEaISWnJWgx4Y41aWsNXRd3TPvpQPd/VjesikKY\nZsSAZfeorSkIT7FzTbhdOLDb7K4hgBJRgm43ipxaaoISW8g5N9hUS5PL7jma\nPdBsTCC3z7ZF8u0KOzzMyFMjtDd19uVJ1dQmkmBy9BeSttakGymY+pGL9HFU\nnwFOpiHAHlcm6WcgLbTB2xlonykl495gospV5+ROKGv6LByJXNcvbOldwKyn\nuqYWCt7JzNfI/yS7l9SfCiy0CYfssR+yjfa2Vasxruho6J/BK7vAdei126wt\nVXb9ul7ebDgMHo1TCbzEAlkUax0Fi5g26Q4+V1SGxIUhhacfFQkBdcUgRxQh\nxnlO1RQJKrRuO3ZHmPNX85yAWcmYPVD9SVapQpYRc5ioRoKkIvfXbCi3gqv4\nkFZy\r\n=Op2h\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.2.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.8.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.f483bd88","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.f483bd88","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.f483bd88_1533155416459_0.7935485730300331","host":"s3://npm-registry-packages"}},"0.2.0-alpha.a63df2ca":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.a63df2ca","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.a63df2ca","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"ba202dde32b7a7ce1ba94ef1c88df21f2b8e21ca","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.a63df2ca.tgz","fileCount":156,"integrity":"sha512-D3HFBPfToyFXvJUb/R81sXypwn1G4ahu+gq2FVySR/txRj7uLhGTfI2BhKkB5XHts3guh//cN+MS+2vgnCifDA==","signatures":[{"sig":"MEYCIQDA0pl1dx76K938YtzR/tFNbS87e9O0x6R4IMsCiZMhWwIhAKVQI18KB/fYYL02zeeT0H2j4TBIZiMNmZnpjLH6C7Sp","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310599,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbYh0yCRA9TVsSAnZWagAAAFcQAIZCwawXj0a/i0pcDWYh\nt1QVpxVoPI+H9pAkwxxNKQKIOB4s6qNzx8Ostzkq7p32X5AFDvNmDNIlgcjc\nIvAPXgaFv5itk4HmacBIJIZgI2BNxvSUycKeZgItPyDa7UGycOckktLBBB6S\n3aJQlz4H0/tJGweiNSi3eCBiVpmXfapCwYb5+yYfFKkA9AE4s6Fm3haZVWxf\nMS8I71OiDAB9GvXWQVgU6qmb/MVJYAwLGi3Xoj7Q8AgxQ4ms+mPL8OEUofEk\nrNTqgTWiNpIcbxG/R3+Nyyrjt74o35QPDPdfhxoHy5jjjqErrG6AS6s6STsH\narVB7SO4ThMVCm5ZdD+9fFEO49oEXk8ymUBLvKG8gzUR9fo30J5l8Vmm7fAN\nn4/EvjY7sSPMFHXE4npK4flJXAaChnyVnNCsn0YfsMue6isRopHUayCA0k8D\nUYudDfeea//5ZfszUcU6PEsmEX3NGMwRcuVdY7LHHVtJiud1BrPhrOu8Cx6h\nVfQ3X+coOkUgWzygDax2ZJpDrZlrH4z4LGvQXzxtVZvkztmaKH5VAU3Mhuys\nLuJTOA3q2woa7U8QHqShm7rHfjIIyN9l/wYQb1DB4seKEffyES1E1eF3gmKD\n5N6vCNY5N2POiG7ZuHCWb7BggdhBTvynJN/eGHI8EepjV+OtehBEtID/Z/jN\nwd1t\r\n=d0dy\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.2.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.8.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.a63df2ca","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.a63df2ca","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.a63df2ca_1533156658199_0.5957113930380453","host":"s3://npm-registry-packages"}},"0.2.0-alpha.3a450a5c":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.3a450a5c","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.3a450a5c","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"fba810ba9d2807b91ab24d9ac88abdbd2ee59569","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.3a450a5c.tgz","fileCount":156,"integrity":"sha512-QWSD4obnstcrjZy+Gk/qlDK1+HhbK4qhThdoGRi4C7X4aX0xw5IXOpcKLEvPgCMAjLETgRezpbDJP4msKTnXuA==","signatures":[{"sig":"MEQCIBNn5U7IM3NoWaD9UODJsCYVqXPtovDuqrSgZkHfmQD8AiA3F7j/PEE9Y8YaY5CQJRY7EOTLs+mHWqFUyQdyeEkiog==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310611,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbY1zZCRA9TVsSAnZWagAArYUP/3iFaiOU+4jzKZi/8W/X\nFGSQILsHWZUwPzWikuRjd25QWJXFeDEHZRTnX7T28oBH+ZrVEdRuzABVOwZg\nISD5rNHlsE8OeFUWkALkt8zi9cF7YBlBJQaQIGzRGvW62+KS1WWTbwGt4gd3\nlEl+0S0zkTackciqAUsooNIXiUwWeNA4D1W3brocWnyxgO/lsP1ZH8cBdKpz\nWotPWCYNoihZZmRJ1oSHa11QPI/O0mltx6d2gfroUa4jreV9v3dCY1O3WFir\nFEywWAH+ns01bt1bQHraSA6rS59h/z3IIjF9G50MI+JSra1//Ft54LC6CpJN\nIcZh1ftsvd2rXrbGW3pV33pcPxMECW1jfK5ol/iKJHkEYStAE5xwQfN7kZQY\nFuMGjqQesYV09BwQjVd/RFRcv+QC4NiogeLkw/Rq0yaJKiumz0paFXKRjTEZ\nP7AfSkMo9V0z0amPe720BMd892MavQAFSFKDoqP/xrlTEvvjQFKLNLzh5Co7\nlZuZwuzTMiqCS6VSnR+JVpM+Ah1JJS4WrmhXzYLcwJOAo+vFP9xZvQTMOzKB\nUzS9GV/qz7oZYlC80y+Ia4ItZUrxhuFAHLZjvgmEUSUhPctNyjj821jDZsz9\nGfnBDS1Ypd68TwdBpZgmA/DhoaUpc9XLGOr+WTP9wCgReogb5th/pfmETYcR\n27Ku\r\n=nAaz\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.2.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.8.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.3a450a5c","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.3a450a5c","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.3a450a5c_1533238489373_0.6046629381428537","host":"s3://npm-registry-packages"}},"0.2.0-alpha.0fc7e99d":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.0fc7e99d","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.0fc7e99d","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"212ef1968aa4c5a25ffce2de63030dbbbee713e0","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.0fc7e99d.tgz","fileCount":156,"integrity":"sha512-xIgbfqV8dtL/YTcChiDZIoyipNcaf2P3dcJhFs5TF1HDL9UFLnwpr5KgBKXhLaY7Wh4OW9k7dL4tvg+5Et28KQ==","signatures":[{"sig":"MEYCIQDKHiJBI4y5BLwyZcJ1S1FgwuQw1y/48sl9FJhNbbaHbAIhANwrJ/jR4Oyd6WW173vNjC6urpkwJx/yn5P+sdOWUSSy","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310603,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbZLLUCRA9TVsSAnZWagAAW1oP/jH+WfRTLVbU0pgFoPqz\n5AHDjeXmP9yAkaAmv8znTzj2m1luH1lHIwYld3G5wgxlq6SkuzpZahZW2ICw\nTSVhxf/zJMvSKu7EHWfgVPJu8aCgSsaKi181PrSmWFd24WCl/rWWzPNd/VOQ\nciDgOZeMNDQsO3BPy1uPEAt6shK+Y7Jn+JBEQtao+G5zEBTULNIEEjPjKV6G\nTXrhCkFBaf34/brufw3FCRktaQqFX6wbpwt4JfF5BK7GDvMaMtVdTcPJi3lw\nBKhF9GTBYg9yrHQXYyumbixzNoo7eKnzUQDdDkH7fCMT0D5q+KgtBGQasuRu\n64pp0CFeU8AcLStBdWAybpc7f0t3QdnEUnH+2gtGqSieHZAbYhvJj0Vhp+7v\nr44iqYtxTztxERVI6eMf+t2FQJ3EpsxTfuWWpI+8iNUF4HwYNYeQPvELjJZO\nt6chEYaCSIzn+T+DLEWb4ZTO9mI8rchX9bUPc+SqHxMX1TUowUZ/vD+eCVyN\npQN9GuBaX63FHoOwRpJRhBZj9f3BcWS06bwr0TnkWsGo+qmqVnN6qw2Rh7r7\nqKfHRdP7I2yRjNFxIyK7gHhDBQRwwq4eEtebC+EdpAvUJikm2RjPbTJikkre\nh016t3uE+Kd7GbZ7r/Ps4AXkB3JxFhlsT/Sy+EehLGOQqUpM8Ei1C9yRhMJW\n/as2\r\n=ortE\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.2.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.8.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.0fc7e99d","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.0fc7e99d","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.0fc7e99d_1533326035980_0.9414581668901232","host":"s3://npm-registry-packages"}},"0.2.0-alpha.92e88d6d":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.92e88d6d","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.92e88d6d","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"23605d4afaade5921cd00df71d4b763bcc5abc54","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.92e88d6d.tgz","fileCount":156,"integrity":"sha512-eGR2Gkygv7I0tM/hKgzw5fhv80DYCWWSlN+tgdBXOGk6rCup8tTyEYpYK9zXgTubAydasxxlBDr6YMQ2dQ5oBg==","signatures":[{"sig":"MEQCIG+R4Rk6jgHB7MKyp+5t3IBFa4ZDyJSo6+Z4bYmi60Q1AiBELFifnKFG0z4JSZ7qYLvo2KE+cFxNH1WV8sYYJOomiA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310588,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbZLuvCRA9TVsSAnZWagAA/+kQAIpNs2pMIRnZWlwjWS7P\nwBMJIKpMn+Sx3xbCU/JvDsH5AyZOoi0HJeVBmG3GSM1KbC5ppBqNSxtbpAU1\njlpjcBcbpWxe41gCyZpZhji8BNfhlYDDu3k1HGx7BjKr4fBOS3/EIB3iYS54\nvXRVD7frRGjSwzgflf2usKrTVK8bWE4yZgOoWGdkpnYyDPUfzPo9AtpHL18e\nUMnTuZYqAVUbQ718dknvzMZ6KIVxsBBsEIGmI5Jizeac4XQBkQorkMhhlaUB\nRu5TfRBYbZzGm/7sJGpmiAH8pGCWUF402ZcPQo40Jm+Tk7UXXWloQ2bbF7d5\n5GkcAzg5avE59Qvm7cCEcXJKDea98cAoNP4gXiCSVnC5P+MpZRvzm/UZlGO/\nyLh0/0udQlduc8uO7jhVoBVcJoLFDQLiT7gRjomVA8+Mi8Zs3y6CWHEHk5NR\noWrha4frmmk4iNBRjRnYI+/0bLjt+ilOVqFVz2fyQbxGxlFRNG9wPLq4K8t2\nYpAAA75L4k8DcR8LVQL1xDy1hiagwaB8YCIHiKf2uXCXS8uqW734Wr6XsyKd\n9VNxxvIoYJ05P2DAdMZuA2zZfgDmzmETkJT5rKSkgFySgx8PHrDoMKvC3RlL\nPosZ71LTgn1kUbGRwH+dwV3ndqebBaU/HK0fi/sOA2gzhHXkZ1XCPYTsEw5U\nOnkZ\r\n=GuSq\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.2.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.8.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.92e88d6d","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.92e88d6d","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.92e88d6d_1533328302774_0.4062315721958516","host":"s3://npm-registry-packages"}},"0.2.0-alpha.3c023cbf":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.3c023cbf","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.3c023cbf","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"fa6250621fc402924e9f6872cee602cd1db811d4","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.3c023cbf.tgz","fileCount":156,"integrity":"sha512-GTyQ8Lfy1YA3wEvnWQRwUh7KzU4L26t3fXWqd9fv6V+5APs5Sl1z5o9/lML3kWXY44bplk7365FJuKwhjNvp8g==","signatures":[{"sig":"MEUCIQDPUYna3CybNjvlgkqBhotzifrVnmUi7rY501u2w6ernQIgJkebcvXgMuYKcYkKV1Le/ovpl8t0Iyyz5BRr+mVYMj4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310702,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbZMD8CRA9TVsSAnZWagAAXggP+wX+sqgNKgdOMu13o5tG\n5hMutnBgapgi9Q0bkK4gl8uuYV2w1MsKhBQc+LBD8IN+1aRZfmE3Kx8WSt1u\nElh7Ihuvc7Bfn4RmiuVpsbeLhPmP+UQh43cwZ/WrlNpoD0ATiTl91TK6A3mx\n3fv/dvhZ++LE4ylwrGO6onPOlX+cjkkyfM1semQ9If2TiUJ6neGEfTB0i28o\nlpaPqFUVsA3rabehzaKIt0xqwsd3V8zZ5MZF/R/YsW0i9YXNI438OXlESaYp\nHsVAsbgx7WE18wJlBpv0Lye4CNaczxhdkErvRzc4hhe9nfHQvustTDkqWT0t\n7SeCU1ZiTyCpTXvCNmwStDP3F2Z57W/ByEE0DS2fByatWOm5X1K83hpJDu1T\nnuQpsGnOrouSuvC/MqWPPHvvGqwVte9kOirqxJqmkT4SinDcREIJBGfX4nSm\niXUBnmFbvN/43Os3a+yAhTqy2Cg/9tEIdDUGfrZr26vlFa60k56TxUI6g3Tq\nsbG/7UjSojuRtB/vn7HssRfPNsJhNKZY49ZJSo1TCWq3CCaCHbTulip84kZi\nKoJaMOuK55JfzCKbH/2T21AyjY7vu5j7VYqJOE32by3XZsX8sKd73KZwpTm+\nF2Z2hUY2UbzygDEflU8ROcTiRhBO9/LvO6+RatbRkzTqDDO3Y2BRtku/ORP8\nA1fc\r\n=9cKG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.2.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.8.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.3c023cbf","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.3c023cbf","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.3c023cbf_1533329660398_0.7208242833524396","host":"s3://npm-registry-packages"}},"0.2.0-alpha.810c5dc1":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.810c5dc1","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.810c5dc1","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"dd3aa335d7cb3c6fd14ae6c86aa56ec3bf1eb49e","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.810c5dc1.tgz","fileCount":156,"integrity":"sha512-3GHtfLPSYqap+Jq1JyEeZc2l+J37aAGBKvkCuZGVdUs6D4Jhp4DcsiGw9pAihVyZU7mrvTxGob03H0IXLAZHrA==","signatures":[{"sig":"MEUCIQDRiqpdtfY8/BGv6LcMMGAMTUiTcc5yZcNISjFCFssdcwIgFJhoVXWRF80rQoa/OAsdPADZylwmZFAdbQNqK1ur7Sc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310699,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbZM+LCRA9TVsSAnZWagAAsxsP/2w8jKPvxekdIJ9wZKnL\nc4XYks4fXo6Ub5bHeRhlvaxSl2cJ2SZh9+K+m8TLPJbgCg7IfCDmfNkhQNqX\naDcwiGYCcYoREiomzqRs6FcHsb9RYMUokH92pZ1p4lMGmJhBcfUvSVVyRzhx\n76L31DmvtaDa5SSwRzdih37u+WW1QGHKdOb3m9Z8OhghucjJv3lGDDl3arI3\nh4J9AIrzkWS6AkfuPTTrQNY8WzjtxkqMrM6V0WjnXoOvk9HHifCTyqemPge/\nuVLuLUbYFTxiV12THnqMzOfH5aGA9MQ/q6AcDcUajCEkFXb6mggVoSEKP78z\n/II9fxf9k0He8tbh/HcylMtpHjOBlBuEhUIc3vsYmQ0BTWUkn40eC31qCk7C\n2b87ycrzDZFdSQWKSktKly5wud4DZxcGd/eghYkh6O2oexddvKDBwlLNiiU2\nrT2pNm2cbB6c6QP7YK+36iKgNw+QCx3dfDApkbhRvoMndB9kObDk4xN8YXF8\nmSsmbbhrhtE23P1w88QZwsFPOVXNuvE7rZ6qOLYg5p3VLvNlC6K3e/sCBLWO\nYwIC+pQizCUR2J0IxtsSsumcjukmHcPMLrmbTKJqeeOe6ncLXFgcHvx54TeH\ngNhcJmWQ3jubXvY8UwtjjMTVXFaN8RDDAzZ2gtNq4Tb3R9m5zw7l3y7SdYD2\njWpR\r\n=fvJG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.2.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.8.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.810c5dc1","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.810c5dc1","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.810c5dc1_1533333387338_0.7520214240122776","host":"s3://npm-registry-packages"}},"0.2.0-alpha.fed9b250":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.fed9b250","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.fed9b250","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"b8f993a23dcc5c950824a5ca5f2f8918ec8fd3aa","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.fed9b250.tgz","fileCount":156,"integrity":"sha512-vTe9KSOPM6AgjelrRCUcdxVpXmhs+3XtV/oDcW/Xi9j2yad5cOM3aSQfhuJcZzq66CP/L7QmZ/7tbU5Ed/dPIQ==","signatures":[{"sig":"MEUCIQDXlbVd4JR0NjVfSlGZErqwhGNL2iUiMm+xS/VCS+KQmwIgHHoyvkF6ooh/AW6eO3PzQs9xDE7sDt3JQJ2n6KQZLgs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310093,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbaG38CRA9TVsSAnZWagAA2+cP/i4cau6kBJ7HdawprBgO\n/llOGzRwv2ApdogAxVBzK+LENa/gKyZ9rZf8JM6a3gOQJh7Qmgs1LQU4AOAK\nMH8dYW07wshkHqw87mQbbYd9cnZsQdZFnUjcBkZshqmC5oV5wkOlol8bEibQ\ngi4HY5w79R93DyOagz05OIqn0hLR9UyAbztX9vmFe3rDicmIzVqwbgZq+V0k\n5YqiwvVV/RHcOjb8K0oCvvQ3ScH2R3XJsGsrmNdDEPuP2CE9tCApUhHXIAnd\nVsk0jsRwjuEC20fuvXDuA1OQA4XM2p0ItHPPKgO7IUJr10RwhXJdyETiM9WK\nBw25v1GUu/CJomIHdwYDBHTR0hHf+o/8jJalTa30QikwAUOwX267TKHXDqy6\nCK8r14LYaVJZvMUq3LNZBW8YN5QjcBycX+j6QW9+aYp48+GZUlCJGsV+Oc/k\n7pBUPZKVjC1rApF9Vv7g24dx9pj+LPTKwQVYIRQuPbje5aK3N7coI75DmKC0\nW35VWBU5gNHXV78zCT23NgNSY4KRlJTAKOxBpjAQEks+TY+tlPzVEobgLZmN\nXbaIuROEtnQpQk+fH1nvj/6+yYvlbUGkNRtj5ZbDOp+yCaHdoLjdJEcCEgNV\n3AtCjnjUtZb/DXyoLWQMKx5KH4CPtKihwA6vZ1qH/dJ9mwyzQCAz49pon27y\nCwJq\r\n=pYZD\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.2.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.8.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.fed9b250","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.fed9b250","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.fed9b250_1533570546655_0.8680408840139828","host":"s3://npm-registry-packages"}},"0.2.0-alpha.409f7e9e":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.409f7e9e","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.409f7e9e","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"f7bf6a1f8a29b5fb6ff4a6e40085cea7bf744071","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.409f7e9e.tgz","fileCount":156,"integrity":"sha512-TBPRyNWfoL1BG5rwJLNoJpLSEay0hPz8sD3+iHhEo1lzYMM9GeHP2aApOij30wWiFrei5xej1To9Li482ETkVw==","signatures":[{"sig":"MEUCIQCACCxT0NWATBnhtZV8tRqKdv5CnHx7KlBMOecbYCyIQQIgJKHF1q2H9vnZzg6Gln1673+8m07CArpUrmrQmdAfwRM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310082,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbaHHbCRA9TVsSAnZWagAAG+gP/2kb2uib4LgSjPG88Mzl\nK8hzfuccqQ+dBH0H3Mc+3cJBaR3mDga86NgjqXYHUYY74KH3IrfIEOCybrSi\nsv5CHc1xsq7pgMYltI/yUngkzdwLz+4K68lHxZzzlxnkOyzUXOxuRd/f5Wo9\nNNzkEAaSlqnGmfFmM4bewLjCsIULbx8nHxyIFUIS4Z6NRVfRDhlf2gtN0P7M\ns+AhgJ4EywSZW8Bq6fXHwBPQ4Y/azKFlXOS8fc3ebQM+ZLuHa/fvCPQIMFEv\nkKr4z8nP96sy/FKruKJPC0uuLZp5cH7+Fsxf/Rp5co6HO3TPQc3oXr4kL/CV\nIcmD1rSsFLG4+DNs4CTLw0PXBM0d93V8hiqP4famFBkT9Wh7VE86NHgI5ue4\n/qcNWlSUfGYc6l5MbcQAdYYrPddJaFlVGXZli9slp6e89H8ZU87oDOBPWzcA\nqI2nmg/lu4nCoQSYUplcUbJDwptoHOg0tX5Kk9TbL+oTC6W8k6X2vgX9dqMT\nXHLsc6x6r6gx6T8rlJVVmXS/UxDm6KeR6+TbwadpUqPXyyGHaLtiPeKa4BqD\nxEuLfDuNiB5HgZTR5IWkCO6QbIl+Su6Qytms7KkLPyjKTzoQNFCXHPpo1tkP\nLWRAId+RpV3jaCxYkOJINlkTYm8VQbW6QXzUEkklQ43XZSztoMSSL9OqFWm7\nXO7y\r\n=SJNC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.2.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.8.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.409f7e9e","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.409f7e9e","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.409f7e9e_1533571529513_0.15420032508372983","host":"s3://npm-registry-packages"}},"0.2.0-alpha.7ba6a941":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.7ba6a941","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.7ba6a941","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"ea3d5e338c1548aba17d2af72de32ae9ae1ddbba","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.7ba6a941.tgz","fileCount":156,"integrity":"sha512-Put+/96L8vhhU6lIlrrbx0wqoHVxsP43J5HI/vi/bc/W5fdmdhuLSH2I4L3FYphfaLrCB5y0H7vWjMD0k3/y/A==","signatures":[{"sig":"MEQCIAcZ6emaELYuG3H4zcK4HUlv6dLglkCvAOqbiLAKvE2RAiAwuKeqf5A2A8/g2BA6EcGR1hnMqM6O3tYG45GkrY51+w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310078,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbaH7/CRA9TVsSAnZWagAAh+YP/17CBQUxlrGptLhBLKiP\nGks0Q1MinEioTMoBsX+Da22t8TTiKio3CMrkDxjJbG3lHfDcmRwpAg+DDR3r\nxDIjOU3lM5b2q5c5qQ9yHc+kWP7mYslb8dUZfWHxcMl//jj1kC11G60WL86L\nyeLkRH7spJjxv3ZaCogAVx8Kj2jxsooqFR5nR7pjlau6GMdJwkn8YhrMnHDS\nkAYh7EvrdjnvsaVjtIJt1oxE9cRtZYyrvdBYvyGBS1H+r8Kqk28ESyKt5LEg\nBnXA80h5wcRghBqpCtJlQ5aNoyp30hqwcdvGS+L9Yy2xI1JwS7PdXDbLlM1r\noJjdCbB8dKRiENqhHshd8Jrn+siBHQ5NepWIEuhQSXXWJAekNiYXgW6HHjwa\nJFuKvXDdOLVYMHXA7KBXKbCqMZhZMK8hRABQOFckyDnAwsuIMuijNsNbH09n\nrvLw6Nd9N6oNIO3rxXyrk2VjokkOxr91r1m5gG7aqEzzvfb7aJNAkzF3BYyM\nxqNKtB/wuXWCDADigPUnrZdvPA/+FcG0V66BQ8mr0u5k80XqPA6t+IvF38ZB\nUl4iHsSyrvUT6LkFJKnGrzR3jqNff7SRqHVlvYSQdeli6QUmeTbzAcgcbwbw\nsBYhWlGreerjrsaHKvADi6+nxZYEDf6CvJzm1UM15XqzkMUl9JvJTt/obNsy\nqHCS\r\n=9Vqj\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.2.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.8.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.7ba6a941","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.7ba6a941","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.7ba6a941_1533574910735_0.3284204588291133","host":"s3://npm-registry-packages"}},"0.2.0-alpha.53dc2262":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.53dc2262","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.53dc2262","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"ea47c6616e5c99761ea868c12abda1aab202b1e8","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.53dc2262.tgz","fileCount":156,"integrity":"sha512-oUW+DkGddYs9tV28fGD70OxIaiK4mPCfLejFSTKFuJcnY7UCutE49hSwJaj2F4tu6cvXJPAEP41Ar48ivdiW2A==","signatures":[{"sig":"MEUCIDstyzPoigUfOic0MvdE52ViolAc87Z/mCrBDU2AigoAAiEAptNA8lD+Et8CViLcCKJMplVK9SY32JCLCY3eH3OqVbA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310084,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbaIYqCRA9TVsSAnZWagAAXywQAJLfss0rRbSgStHNvmqU\nQELOpYUBZW3/QY0SPCsomGavi4ZniOKmJBkVdeETc+rWxTrT1ly83qI4aTx7\nY1ZCPRHe4fuZEdhq30CqdG696KCslTDovXMFyCabMQ1NDfEps9dnu+A2RYUJ\ndUdA0Xt5e3OmccW5E/yjcNPdHeWv1kmGLPwiizDA007MSjRvlu0vlMJr9Igy\n6pqbhOAOFwXfutX9C4GfmV4DIw3DamTbqYltrl8l2deIQH3tq8c0XjFm1win\nyjkvc8ZVMc217Oy98tz6hR5I5yXNuq8SDEWCybgG/4bd45QI8iA8TuFJkZKT\nheaoE8yKPgojPoeL/qG09TGNDRRGTLvFt7+1UakC6FuYr8SxTmFsgJOXK5W7\nQdD5f7tn3ZeDY8jp08zqHbEEirbDjpMemNlZNMIMH8g5doSpQaq7zQnD2aeH\nnoDYqGDTDk038yvSMCq39/sc58uqFlH6uKlobGr/bjHAAVkZbe4YrjEwxiU5\nFQBaHeAYARvw8MCvV1N6ZjMoMqMO+dvP7Eeb0UdcJ3/bK1mzR0tKZApSstIw\n+VlsnTD6vrpgxWTI/nwXy0QST7NyKUWq9Wg7YETia4gOMLV7/zmNWnoMYyq5\nu18SUg2wfzdGGcV+SVeMxmK92ideqtU/W9SmfWUUqDfN5D7qmGBz1ChGGMRz\njP8z\r\n=SuUV\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.2.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.8.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.53dc2262","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.53dc2262","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.53dc2262_1533576746177_0.9999909459465133","host":"s3://npm-registry-packages"}},"0.2.0-alpha.5f599f3c":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.5f599f3c","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.5f599f3c","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"4f388873f26d3bc27bb1aff4c71d70d8694d6ad2","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.5f599f3c.tgz","fileCount":156,"integrity":"sha512-jsL2FdviD3KWFtnHAT4Ns4sBvrfrYvThQmqRT5GYsjMrhpKJevP2tuIQhkuX5KoddOakCVvIOpP2J5bmp7pgpQ==","signatures":[{"sig":"MEUCICWJcLb2d+O2nSjF6IzLluPnDdFS8K+kPi2wFYgzJwMHAiEAphgkTZKWcrfu26Psfxw2AdZSKm5XSzTS+f4S37jxhBs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310115,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbaKdJCRA9TVsSAnZWagAAUmEP/3J1GZcbKuYByk2AWgBW\nkBiENp/kNieLIr4bLhhUdersSJVPmjAkCGjirZrshIFv8AxMboF0jBmsE18t\n1Jqy93aWQLFhy9z0ATRLKEPhTwhFUpeBTaiD5mDmXdx+FhzzlokBuh5b1oZH\nn6yZpCX3MiSSgbjaqBp/6BfNiAyUxtW7onp6zLvjcov8KfUWAhYNspefPiyJ\n3U//0Wvym/1GB1sPEacGJFGUve9e9I/TAO8TGJ+CSsBNWO3IucI2uzQM7bFV\naoaSUMNSdPoygRsiMIpe7QEehkFt1oGJ4mmj3Bg7NKL4yQ60WYmE1iL/O+OP\nuZd3fOVG3Jl5mA+hLhIm0EK3ltJRg+7gbAN33aa7usdoHBbA7kXALiOt+gns\nTZOIf1gYmIpSJoiSCIzsfYiWAtT/tGy/QM7MU0eRgQnctHjDGklubpXA5D+F\nc3y/ZLZOdYk3VaR47DkezitgP1rZi/LtaVvttUSbPoJQQ9L6vkyHXsVz1ix/\nZepaI/7il7/5ESCWk8u7CSAY4fBNUQygspCY+6IxTEc3nk6Vui4/ic10Bp2Y\nUNERkr8DbwyCNxSYHSvVIWUbpqnVN4crisXTsxnpz2FhJLmwDn4MDIWd6q7Y\nqPKC1txUgGNehBnXGCEYPUX38XtmHwEE/DPG3EJHNlXGGrVPb/w9nZIMfGMU\nKBMC\r\n=/eSc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.2.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.8.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.5f599f3c","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.5f599f3c","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.5f599f3c_1533585224755_0.3857490594924362","host":"s3://npm-registry-packages"}},"0.2.0-alpha.709ef378":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.709ef378","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.709ef378","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"c53cb42b677ffdda116642a50b47aba0742f8095","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.709ef378.tgz","fileCount":156,"integrity":"sha512-JFop7DhGtZrQB/CBf6y/wZ09QDDXOQ3cGZvl/ubP3khgWsp1bUCs2Gce+yvvphzl9rqSenSxEdE9hdAJHAndhw==","signatures":[{"sig":"MEUCIBY8OhK9XtdlQBdBZIs7AmYu/jqth7ak5jiuQPx/hWiiAiEA4wBRkDsHzapwk4SCFnycpqUNN6hS7+HUqPQXyKoWxIQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310109,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbaLXhCRA9TVsSAnZWagAAtmQP/ir3W2r09m1AdZxSYBfQ\n5Y8Ot79tn+N1vODL6blv/jQ2R7GBMcDG35+MKdHlR/BqcwgMfI56VaqzQQEP\nvFvSxb5w7uB+F8kGjxogPRWdODqCur3ETPTaRoNbDqr3gg6IPfSibjlI5y1c\ntPFpd2Tw6hrecoD1JaGbVXAtMRtkSqpdmKAwVjuOFviOby1qh8Bj/veKm1nJ\nh5lVK0e7DS2m8Ks4Y9dHoms4kC/hJ1GLLEPxv685SDkj1kNAy6KL4o6bwkBq\nDRQs/tJzh2QgZdC8h78f2d9cFUjJUxAmjSOdqKzuqxMUgxb2pLzh56t7Z9g6\nMq7NggwTuuydyljj2/IJfVY0r/HpBSijlbkuImgtguKRZg2wdt+OD9Hf6HHP\n8XDUvrnwlytBOHvL54cCljyRjEcwqOKLNtShGhIRs+OitJEHCtz7U9kEdVxL\nTtrFM3CoOFI2B16TYXTTxBW9C0KakHE4vK2Zt0Z06EcjHuxABdCWHdMrODio\nEl0DMyIAZsMjch6gdDUk7Xa/2gIRRw60MDqUmRzbLYvPj6nPzCsXUOzSHwGW\n24KCgiiEP7cOdyVJe8EtaymPJ6EKmxSQvvmPsrveMQ4lSFj75K3Uz0JLeKSV\nw5iCQFTO4kX3ZJ47uTDg8RnE5YpCXv30GctAGCW1gvVMjYaP5tNmdyLIAa1Z\nDx/S\r\n=y7j2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.2.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.8.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.709ef378","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.709ef378","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.709ef378_1533588960733_0.7182628977896781","host":"s3://npm-registry-packages"}},"0.2.0-alpha.61e2d50f":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.61e2d50f","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.61e2d50f","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"2c1cef1c7ab38338d48acd66585f47de2a3b5362","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.61e2d50f.tgz","fileCount":156,"integrity":"sha512-fR9op5ckQOq4138e8hy4sr4oea3PcvAKWtjbmeTJjoaIV1GmJN+yj67j3kENc/hQCY5hn2i8/2fsMrvz/SLKjQ==","signatures":[{"sig":"MEQCIFF4m+6QWWwP4/+GGz33khI4oKhYzF7UDA9hLFgDHB4oAiADILBCVxKqUjnPoeC+MEzS7QrIDti7K4JtXJ+TYvnZGQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":309960,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbagW/CRA9TVsSAnZWagAA0IwP/0fEHzrdctPn8STBlI9g\ncNKrbrcd2cGcB7SlwcfmclkcLUD3lHM9/cIX7GwN/1L8w/agnBX0bGVQlhod\nNe2bUXjnFe5dFhOy8wgBPdv9hJvlZ97yMNPIX/TyBStwJpjPvA1zW/1cXAPD\nGgOMrNytTLYHdhLSAlHhpOf2lXyAsQfurvcaWYAO4bLUmMG2bBYDrC5mUaBj\nfcl7bjYDC2n6xuea4OL2JJlovmrEJGEx5fqY6QYdszTjQcoziu8yq4I5RGgx\nvsvw4+ZhcsvRxJMZ8VdKfyzq6Gn/UI0J5+m36OCHroJAcLET8WCSxGYSHcEV\n7f9jm5RmaqX5GjAPi6zParH535WjaplMCWuf2x0l+yoh7TSKkcgsqWL/rn+7\nmKSMl9UDJIwsh+NIgdYqWwRriEhAaiBj3CIQrxQO8rnBw0NMofn9BRqUxHbk\nfNIxIZGlE+ScoW951XZ6NRjHJ3N87w2QN12+zE/KGGkjD3esDhVnMMaFGePF\nKCsolntdpkoTmUQ/T1MSfIYk2FdmMDNSy5lRvZsTeWSh7vPdQmRKn7ixrWHX\n6yoDddNFpjvvZJLfsUZgssx6JbGVx0RzkVbLFdOBDXujwcQg+mWySFNPjJ8V\n75L8nlONi+15Y3F1s0HIfcXtefK/5DD2f1VLDxSIqogVBU17P+HVRJ44Ote2\n8oFI\r\n=Wj/g\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.2.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.8.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.61e2d50f","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.61e2d50f","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.61e2d50f_1533674943683_0.605818172967377","host":"s3://npm-registry-packages"}},"0.2.0-alpha.49d305a0":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.49d305a0","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.49d305a0","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"35cfcecaee805c0187ff542fb5bfa65e0fbb7775","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.49d305a0.tgz","fileCount":156,"integrity":"sha512-NO75TKQdDrXaBfrnrZTjziNIs+2mr6JGeEp7U6IaG0DUNRettL/nTInpKAAdE/4l0ErQD0HciMl+lKgge9f4wg==","signatures":[{"sig":"MEQCIBmVWvQxZLnJKdJAn4VKFkzvMnbe+KInUu4BQ4FFrtXAAiAeH+uUz5j1behmAwK+uuyUKx9hErEh2TiTe5L+s6psdA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310105,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbbFikCRA9TVsSAnZWagAAVW8P/jsb8aDxF++Dws4xdqNa\njOLwT0zwt1ECj88ylCH5iPbJbEWr17InOkEH7131fOFI24be/IJX9bkfC/Pt\nyrdLxIUVZBMqRi1aXLiSWO4rWJSzZsqIDrJoJhwAldOX/AL+qSxOD2+fliWw\nw2XsAJNfkZCuOcO38zGteancJsG3Lv8R6mJGc/Us7cEmGdrD1JFRMnOfHWH8\nEKcQgG3kGtXpaaSvY2UH+qrOBNOWZZ7Z7apljglDS4q7CKutygzm90MyKCDJ\n/BfZyYCNVz9o24ii5MsqqO/yN1GVVTZOzT6HNS25+JjUxnjz0HA2Ao7dTOBP\n9FQgxyLqOrf7PJMMGhzc9CKmQIclzeMPFEhkHJQEFp131F2hmTut7f/2mKWZ\nPXgUJ4en5tFiSBNsibkIdKOt+uaioaOq3Ni5vUwmvme+Tkb6rbZDjlMfYeob\nYurcsTh/lMl5dGE8pbJFdwbsHYYa07leLBXeMIx3vGv+6Q+qEfMRTsOuj5nb\n3oPseVYdRd5KQFhfqovI/8aN7j3g8xYXy2WR4YwgdTcBzb+TTnO5nTvXgEsr\n+Rc6vB7otqIVemkL71nRkxM6ejkoODMWMoK8rgpQf6KtWC+7toUWq3sOJjVR\n6iMiI+txVAJlcmx6XL/NvKvcuI3ndKFhuJ2a9jqdpL22MpRDCTdNbhN/qTBN\nebxG\r\n=HWMM\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.2.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.8.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.49d305a0","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.49d305a0","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.49d305a0_1533827236320_0.03505333431520441","host":"s3://npm-registry-packages"}},"0.2.0-alpha.21c2f4f6":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.21c2f4f6","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.21c2f4f6","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"69b736701c8173ece313fa531d46fd28c31c7e4d","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.21c2f4f6.tgz","fileCount":156,"integrity":"sha512-RbLTGOmC39bGXs0WIK73Ylq6Us81wXxkTV0Bk496LnU0fN+vwczPTP885vI2zcA6YlyBoPPyHdq7wcfUux3jDQ==","signatures":[{"sig":"MEYCIQD2OjB5SekgWODjZIacZ+AlZ/AyD9euyu8vOsmtWk5/cwIhAPYA02KDPicbNJDi6WGYp8AHW8ozevIOHSfjNQ28E1Cv","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310111,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbbJkfCRA9TVsSAnZWagAAMKYQAKLJnCeBFm09SOcUZcig\nWVcjuP5FFFVFwPMOlkgnXz1B7z9hYqbe4vi3CgyG1N+O5fCBd0aSYQFeCWBM\nRTKQGrNLXMl9CeuAkT9LBndBWan9a8zvXGY7xKInP0F9K23naA4EiY/T0mY3\nl9wbLaWHre4uqJxleGym99+DuKP7quaek1jKB7f9g0Okkv1l77UR0dmvXXk8\nbxB2iQyTep5LfkKM9UMk4Ar6ZVztOD0R4lVno2o6AGprJ5TH5zJyqz2Sf8cs\n456CWSshCadZ64pLdjj1w2hES29Kht/7YZL6AR+OJXLaOQdm5kqxZplzz/Wz\n46tiiYfHC/DX5UH9AjK3vVeVKaCfuceX55eLrfBeQMNfDFe7VM+47bH9tAvd\n5zDn3k4Evog/GoyYpDRb6Zmp6Jbx8SF5bnoCmumBdsgNY0uKVwILCDQ2nFz3\nUgi7vsoCoKQMbhErpDmGksuGNUXwoYNYWueVbJOubvzE07Pan2rmVwaq5lJl\nf/JaJ/uUNiwMHKg28VfvR0FPZnRkxvgvOsXWQndyhBQDvOR73ijRXKALYwPV\nmlG7SVIOde4Yz9PjFS/kg19djmTsuCLtUSZbDH/s1fFL2xtlH3krZGCG0t0O\nFctQskJPBeHpB8XkoNHdrLH08+co91vZrBDBkLfYKg+K7F8SK5z0VmN46Tu4\nn4jB\r\n=Gn3p\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.2.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.8.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.21c2f4f6","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.21c2f4f6","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.21c2f4f6_1533843742934_0.8773836445354959","host":"s3://npm-registry-packages"}},"0.2.0-alpha.23707849":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.23707849","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.23707849","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"76e1715c454a86c8fd06da660f2396dc5fa5c568","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.23707849.tgz","fileCount":156,"integrity":"sha512-2P2aYufqv3J+QhcnUSpgYdQK8z2IT8YBnVx6RMjGSfQP/sV7j9QCCyp3Is+QxjXuAHS8iDWRLtrDgqi6sEN5og==","signatures":[{"sig":"MEYCIQCO0ebmKio0DgHvpuqtu6u6BtOy5TuVvPNBI1qAbPtLtwIhAO6pjONY4o4Gf/eKKCpvaYhHSI4F2HFTaRShTfxeYLvP","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310106,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbbbveCRA9TVsSAnZWagAAovsP/RdJao4PZ+O3ge4TKS4T\nEVGwzjSJZ3gCixJfsguD3qt+bNX598lAOgJOsBA5B02EBdzFufqi7M3rxi1B\niZtfpUjS19u12jR+tnC0GFHij7TsSHbWVQa+puD1wq6K8b/l1AC08I8QLG+N\nrofv/h65XXwH9Ts7uWeEIOmdk1Q0KTRjxKe/4CbDz9+W3RuNipsgUlqy0IXb\nxOaFKRx+WEzAwbzMtlnI4ybdQTAJNl0n82HfQvZYdL5eq/zvZorEqkVc38r+\nVHTtILT74En8Hq0Nb4XnSXPxUCAy7uxRBIEQNgfUYOo3XtAdtTxisN6Zj2vO\n7na9SBVcq4geI7mJglIzCz8YM26qHbaNi6e4Hiy8YYolGCmZ/3Mg22yiw2DN\no24ymDf+Mmj0Jh7cTwmIwycEOfMWWBtAoIhXOoU39PgLLpl/7IpZ50NK8IDR\nMZP3lVJ46idEhJ9K9kq4cUIjRy2JhIZZE6hh3XlRNuWjY4NloAJN9lvvZcJy\njRga4BosNjrHkKRcCSusez4BCdUH8Duf+NWHSit407mZ5rO+V1V7P8XICKv6\nUdDz54t2bcncxrI2+UXtc5f7A8K/+tN1CRTdlFTbVznNRRxnXiETZcxxYzP7\nx/HtnYxjnBOXXZ8YGmx/Dl7ReP/8KOZfwjXjkcVJxD9Ooz535R4aa3wdyQdI\nkETh\r\n=Jy88\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.2.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.8.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.23707849","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.23707849","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.23707849_1533918174483_0.5674265236571847","host":"s3://npm-registry-packages"}},"0.2.0-alpha.1db13cba":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.1db13cba","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.1db13cba","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"cb3ffa7e1d8ea6cf904acc4a7f1d13b7d1269217","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.1db13cba.tgz","fileCount":156,"integrity":"sha512-eS7prpgFqfKAXgOQbGwzZdQHkfgT+Gqc3LyiXPoKD3CbVnZLuoQMa3wkRnaBKxh4DR+WZHIcuE6NHoGS0AEFeQ==","signatures":[{"sig":"MEQCIDnIigCjw5T6Es1U1lLp2HsN+WGCy3lj7wpefrrPaJfyAiA4UbC3FaLf7wPGNwVki69iNlLP1wIZxDosJcX8VEJb6g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310065,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbbd/jCRA9TVsSAnZWagAA4vMP/0OLa1cIFs9GKoIwTtNQ\nMoTEhDkWi87kCPsMXEeHihXIcomJGXpnHumB8OQv4JBeb32xNGPumVOpVbzi\nwEckdOCiBhq1Q8+oOKIQF2v6Bf8EY2ey5SL8zGhl2qvKfv4hZeTRObQibILN\ns+Xtftj+9hD7ykFoYGn1R5dfs20tnm/BlxpQMfEzgzFJOtAI53ublvj1w1zZ\nqq9/XRhBJRIPdq3xECp33WAvrVhQm+UG17TPGet9ofDXENUzqfgj5LJFr8qE\nNAJ3O9NImtI0mvXDObPaOQXj5MOZiS8kAFKv4G3YO+ksVLt3AegwkBm5n0tH\nl8UtDC8qAcZsAv9rbGaM6ZKgkRX0WkpXeioSFxzpQ0U3iMN/rsvv3uwCxbKl\ngKqNpfnLolAZblmWSCjSZ5531BOvY8sEpD78vhROAss2rTOwC25a4h3HFyAy\nNq6C2lEaMGEeoVYSVrW6ktHdOR8UuI/WWo5m9x6FD558pX+h4/RFA6mpF4nz\nkaMRzkZfUwub1hnDRwe9VIwo0Sb4oNVeIW05yphlRh5Vy9RhR61YIS5zn5dk\nrf8VOEKNupSvi+RQeLdIRnFfSO6bN68wJWLaFeSpOJRCSYi5zLNrFBqmy08h\nQYfpKCh/JZJ7AszJulhTWQTypo1+kv9lZGF8861/woDCNsB+EUoM5dus6BLi\nfY95\r\n=Ux3O\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.2.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.8.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.1db13cba","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.1db13cba","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.1db13cba_1533927395231_0.555184458778434","host":"s3://npm-registry-packages"}},"0.2.0-alpha.987931a8":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.987931a8","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.987931a8","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"ba572e60814960fff4af71793db3c3831d8e8c8b","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.987931a8.tgz","fileCount":156,"integrity":"sha512-p3+bggxOL5N5/nuKF4prd4cOgCaePQXtqSksS5tMA6nJY2r2vdZ1uwMlgAKGQXsJ40ZZBPNtuZZclsaoJLp1Sw==","signatures":[{"sig":"MEQCIE4RxhlSD2yAOA3hUSiERFeDg7QLpBqw4BUMiFps1H+BAiApUiCUTsrSKYYKl4XVXLJInaKpx1wRC1vFN0sNHcieYg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310101,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbcutZCRA9TVsSAnZWagAAQjIQAJtBDmDtcl6L0gHUWr+N\nAW5iZ140bZGkYfQDTszL0f1TLOVxAqBDnF4uvEmLvlEaGmPYyvKEKe0N7E1Q\n/6Fz5KJjjO7bYri8IlOISZ1/VJ0mg/xKcrE3ACvYFJ5xFxjrpsVc+zmSFDIW\nZuf9zA1EZbwDGFxjtk/W6XUw175Bg5RNyznVJHZt2utGF+oPoBSlQFYKXIlu\nyRUicTDIBYCAMwgSMb6gliSSAQ/ZdUickGScemSphrPxH7o8Sb9ShVUVr7pT\na0Qf8O1vLMgv1WSBprxzzyweFcexonIAYIHLlnXNvfpxcrrks3cjOACDJLcN\nnGSjt8r26LzTPMgNu/h/I35wC7cDLRewRncTfOpuTzw7wKJQbBTRZPG09k2U\nMwBIXd0JyEaCykahRKP5YZep5/IHqgcjjuHuOOqua2//TD7dPMfCQvFeSWQs\nQWxraUN2oVQ8Ykoy2QLmRKjl+UDgPMs10oCxmPAuXmuqe3xE8zJmiH5ltIya\nhieZE6WKqmpbDL03Cu8LUxD0NN/yY7i9GZiemz9oZPKv8jL/L1Gdn6SQ2VrS\ne8oJlltuNeLp/39wt2BckW9TOEwu5MTeK411i2D8mPwylzsdO7cccS2r0Q6f\ne+LMpEM5DIJ/KSa/K1f/i93TU3XRn0bGKxaHJHjRrruX2ri+zQlhbrxjGCFZ\nwoVZ\r\n=rbE8\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.2.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.8.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.987931a8","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.987931a8","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.987931a8_1534258009608_0.8388149591039209","host":"s3://npm-registry-packages"}},"0.2.0-alpha.83b6f01c":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.83b6f01c","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.83b6f01c","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"c4570974d7f9254a5fc9611d52801601ccc243b0","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.83b6f01c.tgz","fileCount":156,"integrity":"sha512-3rOOPFEKLRU08X4L3uGom8Jo/EsBAaCn3Z5n/SkBfLXuig5EkTPnazm83MLezZ1oCcO/mfwiQSGsfedacpC2Gg==","signatures":[{"sig":"MEUCIBSevasvrzrahouXmyGd3XwYoS1tpCc3x2zc2xZHPnL6AiEAmZ2/5Wnlwnvm5QK7eIvr5c8VHY/Qg/yM0psqbnfIn+Y=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310101,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbcu2eCRA9TVsSAnZWagAAQRsP/3YMXLR/Q37kWGcKfkFM\nmwAq+O16e3aFnQZbJs0bDpxEmEIc6C08um9qot6pE76Xw29DGUn2xNWQpZYQ\n1xsCwwoBZO/dNvwl8DOtu3Bq4mTp2oRNozv99wZUFLpbBkbCPfzrB/o+BG2O\nXO7B2mq7iDaQoaBTT8IZQ/CNl6NH0hQOtG9QJK5ZaTkg0M0YvnuUY6L+SiCP\n3WkAgeGpmxUBCGJxomP/FPAey/szyf4NZtse22slwPJRrJHyXBNrky3wMPLI\nt03M24qkTZZCZdbcin8+/ZZuH/vpGXaYjiRt1HqwHey6nZFj4dZEBJzWE66/\nJIrVAsTdI/v6CHLHNaVgDf1E/kH1TF1Ey3+mj4/fPx4Y/SZO5fnVI8gytxdg\nS7i933kZmBed9w7IJCyzF6ml80ySnEu1QFARFPbecENXEfFuaE5E9YGEaJVv\n8dLgUuCxWG1cCjICTbAzqsrv+/vc5gZA4yMkojVFNmFTlwPpxFFUL8yqIRBF\nzrY0GvUXtHRCrhrhI7Mlv9CGi4BcnNYVsvbdwHkjKmL7cynHl5w71I5iDH24\ndY/Rmj80qcgtyctj/h+dZi78miDm7lRxk2CZ2jFR9tbyr+hEI58wTy1M/fF2\nbbVLK2H6GfaIgWtpM6fY9+i6Pilj4li2kGDpnZGau00760mqZDTOZuCUMnJr\ngGNd\r\n=5DnA\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.2.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.8.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.1","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.83b6f01c","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.83b6f01c","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.83b6f01c_1534258590027_0.8958073258434067","host":"s3://npm-registry-packages"}},"0.2.0-alpha.79fd2218":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.79fd2218","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.79fd2218","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"9c43e158f6021b097d8929114128f048d83ec8e9","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.79fd2218.tgz","fileCount":156,"integrity":"sha512-lC02ktxEvsNyefG7+UmlE9b0BTm7VBZLUaTtI7gd3ukKCkoB1FZMs/BnXmUEHJ8V9PonCOUJ8IjbyneKU/fqLQ==","signatures":[{"sig":"MEQCIERT673pQ5yDeAbGwLQ1c67Xdls+CncPuq3Pv6T+f3LOAiAFr93xsvkbVGSG7K0VBn3/npO1q0HwtgW5E0L4GDfHww==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310092,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbcwKVCRA9TVsSAnZWagAAS9gP/Rat4x5VGb8gHbZ89xJB\nKY1ogtxb0GQM7oKnjCoUd9bCgKL4w7NbzAjVeDw+9fMBMTMKUMdR0pxln6CV\nXe9bta2IG1+nVHB4dU8wpS94WLgB93Kjki6JWTLMmzH9AZBoyqkrm6yBQN6o\nEIaEU/W/L8prx+zHmWLnrItkKhKXNG03/j5f/QJflIOWv3Z0BLmkAFtWigLc\nWBblfh0M/uT3I7GcJjqN+i7Lv62fpM4yecsNNparpwMUaZ45INd9qdBan/Cb\nvi7ss7XYffZbbg4FLk61gKaZF/jIPICazX9+71DAxPe/AiE1lzvMJQ+HiGHs\nxYkyc4nIDtK8Gp8DCN2dtn5/R58RYQz6/q1csviTFwR2tPjpPiKW8ftzIbGm\nCzrjLVoJKodiEh/psgIf6QjS1i1WyGZFmIYH8cntqDPaxd/zYNSCcYlMJakZ\nBvL7dxaEUVYw3qTbejubFv9HGZV5iltczMZRFClkFMsAHszSHohNzjcKon3u\nB8P9vGIjsALWt2uu2rYCXtQvsvkvG2u5QunM3hEOBwNgRAGbrCDo1mUfm57k\nZEU+CrA159bzcUxmu1BI9B59Dwt10QLS7jYQD4n+w0Gp377SRMynz4YQghJ6\n111G7eYAmXoJplZIsZ4wXwtp/Eq2ozKFJYt/lU+iTilHJLXFJ9sa8Gbk1Xof\nQgVg\r\n=ntGL\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.2.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.8.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.79fd2218","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.79fd2218","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.79fd2218_1534263957326_0.2532552724185735","host":"s3://npm-registry-packages"}},"0.2.0-alpha.230cbfe8":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.230cbfe8","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.230cbfe8","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"35dc0f75422a13a7a809a9398e0ca200124ceb92","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.230cbfe8.tgz","fileCount":156,"integrity":"sha512-lvPEswd7oMioovDvKuiJlyCRuZGlpR4URINJGThq5cRHD665pIgR7lwHmp3GxyEGQKJYIj4o/ueR2Nkfly1hng==","signatures":[{"sig":"MEQCIBy5peqxAQVUVKEN4j1PhCDxBqxnOwAPxwJt6B5t9zZvAiBxdQvHGUqVsZo5PUnfArmil4Qr3wl0n1i9xI2VjmQqXQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":309960,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbcxoDCRA9TVsSAnZWagAAD8cP/ja5laZ+HkErciza5cQk\n6p2oPHuuxgz2O/Zshf6jjEupULThMsOrD+OVGQ5okoupiLMT+B69VKBDlNZa\na2Vu1Hr+aobfOHNBnsXvneLBxIdzbb2J3aR/7VVcm784Vz5yVXQE8IdK8DK/\nyum05/tItEoZwcQDuTdnIE82n7ErAJZln8Oc3EMg+aQLeeziLTnmmXuugJda\nveG54MGymH94GawnPQI0a8nR/p1qB/fzNj0nkMHD6CjRASmiOgcbyDfBjYFG\ndYetTt7lVN+WijiavQ/ckDYNUvK8qGq6MSO80EJ5TX5Xu56Xe4pFpx0HrFR4\nG2LqMAIQ0zmjfzUm7T9r0qOtHXXdtFM9XU4yPE1gbpY+NbvfMR5quuAjxo45\nUgJjsaa3CAbJi1il7Py8O/O4c1l+LSto/NAiU3SMWfCGk4IBOLVOPhpxnEVj\nxdEoTg9B2iTwALGX78ikV1Dnw9alWDaBIFIb47M6GZdjDDORTnmGyUfYHnsH\nzrs6ZaaCvt8yxtGaWXeHARbILpcKw2BEHHz4qvNvLAr8RGE2KlH2V6Ie1U4q\ncstd/riUiD+t3EYBM6XbMUnhHZz+wv4t7DV6rU08yDQ1oSkF4bEcaX/goBOC\nKnSTYCqBPkBq/tlFlQn02LiOB4a1wKDMDJeLMJJ+DQtHZZiuMzZIj3VcRB6w\nvuqQ\r\n=aZ+c\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.2.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.8.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.230cbfe8","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.230cbfe8","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.230cbfe8_1534269955117_0.4878648802150949","host":"s3://npm-registry-packages"}},"0.2.0-alpha.8ce3cc7a":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.8ce3cc7a","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.8ce3cc7a","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"019dbbed49deb95ac604ff8226361a34a47075bd","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.8ce3cc7a.tgz","fileCount":156,"integrity":"sha512-NgBt6qsr5e6Jow3dykD5wseCiXa9+QRwy1o8T23z2dBisUkBQUodhaHMjpO2SO/8pHQJfNxiDHa/r29RKZjqnw==","signatures":[{"sig":"MEUCIQD/TpsRzoMJwWlRk7QUXeviwZ8UBAJj1RpQ+KzyWyWNnwIgfgWhnnGNMS77UVMJxT8gNp62WA1EmzzZkNUS2/Ezbqw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":309960,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbcx2dCRA9TVsSAnZWagAAi4cP/iSqmpWgoIz1i8hBaIuQ\nyDMzBagj4N/hzyc/9S6hZT3tBxyikmRx+kOFNb0nh+sChJ1XFN8Hvsc2dqRe\nYV5yHD3kmyaEkThkyoxxL8jup48R5DZZTKfqiHF3gdrUdbg3XQSkPWCTFuZ9\nqXSt/oJf1t6qZnJ0vGMrZxHR4C5g5yZqaZuBFiO2+5HYqyPNuCUFQnX7SX1K\nXDutm2J0RoxXh7NmWw9YAtfMKPHqMOcFr7bVRJrqYmvyaSFczZgQkeLC2H9g\nrkCtxVyL5mTJOEQ48FTmTof7A0LiSXCE5YFcDfRanpKUOnWOJyij0k5kCxoi\nJjesxu8DfSYN7SHqtSCDVvOkVVRDBj6EQcrpY2DPaumduuIW0qIU92Mqb+Uh\n6IHf427eVaO8Mj7Y2sjEmLZLMOnwkkg6joE5N3ak/DnW49WGgvWceeBHRwcN\nlBOabI0hrpuVEYiGiIVozKz3WkKiH88P5nqAmYQEua6HaZ2u0y1MMkJWJ+99\nRvHNuCJTaYSntH/stNPB7xXasfJ1Xb3oiREsJldnRAhldsNPums1BBPgPNcL\nsiD9s/wuFi+08SWMGssvn4jSh+mrqcz+2CsV6meqcSw4a5ADHJ1AB5t8wEl+\npruoMy8zXgbqpenC+6PcdBKC/q81mar68ulBNtGCY07EKha6s8VGJnTxbSkh\na1qu\r\n=FDSp\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.2.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.8.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.8ce3cc7a","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.8ce3cc7a","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.8ce3cc7a_1534270877107_0.4185192582030237","host":"s3://npm-registry-packages"}},"0.2.0-alpha.0d466f67":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.0d466f67","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.0d466f67","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"89e3d5d4ca459419ff47a0b87c3573ce14c74fd1","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.0d466f67.tgz","fileCount":156,"integrity":"sha512-cr76DwDrctaMH8uv7jHOnN2txZVS6sMYCCEfF8AeVxT/jNSa5FqPNhnlFj6JlMi5KOviKOHtt2oxfFlsYDJPkg==","signatures":[{"sig":"MEYCIQDIioCT+bONd8kDIy6MXDG3oJE1FwDKZB20kbnuNSIRRwIhAKQ1jiOWRmHzRhCfLjLPBYKXPvSnvxOU4wsAdacHsg85","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310094,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbc0skCRA9TVsSAnZWagAAFgAP/135wvjvMgaHK2KdlM2m\n06vmWBSOQT8JrdopzRYlcTlTG9eoLM/NaupBTg3s6kVHiWnsxp3mZKe1ek9N\npolJXONCe5+YqHMW+a/gNmm+ojBZrjGLQ6DpANgZhWRZftRRXJmOusT7Py/Z\nLAnf8RPwVkbYzosB8qVhe4b3AF2vHr1e6bS0sERa6280GeoAJFayUjYZYpE6\nXxVuwgKF/XgABiU6glSrGDUrKIHJJK9jemXqUpbkCZahOAwDO6k9+MzpsZKv\n3byATPoBR5KX+k3bWDOXTYOZiJt2DjRwWrEimRVdY1UE4pIK0fZQTEXZlAMv\nR9sawIz69F103fps728FGyUbsKKRGN8Jfv2/3NQO+hd7vQBY0rI8o7n/0goq\niOf1rkC0EbYf+MOwnbxZVX75HMzvsIWRGTRVKQpm5V9X4IyVfwRlfgm/4tgF\nw3llpzPpVqx15jYLumem8/o2OxQxhTg/yGxISlCpA0EatcP4QaWr6dDFYBNB\nbLQs0Styh+qU93H2dHf6uQLUyDFKvqMicJ0wIazV0uKFldTU6pjWNnqTHYIi\nq0pW/Ag8Lafitx/2fA4gSMWJfsFDJa/dVj1v6P1gCFYHuCjv2y7N60OE0xtN\nsoFbcSq1PK0wumPoXG7TyJqfDPCeSM4IF7DPBh3WodqNbEEuX5bYCNomc0F8\nqE4v\r\n=JN4R\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.2.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.8.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.0d466f67","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.0d466f67","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.0d466f67_1534282532323_0.826579473582121","host":"s3://npm-registry-packages"}},"0.2.0-alpha.60583fda":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.60583fda","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.60583fda","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"367531aa76baedf65a872f6c1cf51d8f5c8d78e8","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.60583fda.tgz","fileCount":156,"integrity":"sha512-Q0yNMkaYMROxQRO1FeWdYEuRZOLltXrn8EXJW8kbETSPtPi8W8x0xXS8D5cVQx4PSvmET35Tyck5FsKlyCM6kg==","signatures":[{"sig":"MEQCIFtRm2VDktelGoWi5+eskpzNQFmDAuMRml5zW3loqFfUAiAMBI0XvAx6gT4Txuq4ql13XvWx8fpHX1jArfYFopcexQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310081,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbdDWFCRA9TVsSAnZWagAAnvQP/36k8yfG5cP/cwerTNjS\nscVgHrzwx05IVN2ZL2u+0b8L9awOzkoRAUIRwjodwCLeDG5Ql1LvDvyTu8mt\n0q++gwdT0LL0Wg8/V5Qijqrb2W+qjIcZUVKnKeQo9FaQsCiVIeYNXLs2AELl\nbmsXtbZ9Sdyy79MLzNdiQE/+7WaBBoJbrLhq0FTpq8m4jt6uFJwTSnWWVN71\nXtup5I9K4w17fh7AtyeKMGNoG/Xckx8ogkvZ+gaheiAShXDulUWQs4V7bVOZ\n3UpKWqpkkDcZLsIsJZ/QRGwABy+KgQhEqETrwVfHV3SCWuRu/3Gp1MCgkEoU\nU40lKuPxu6jL7BpUUMI9bqqTmddTQ6SLuM8KSo29U1mFCE+NhmAbTD3KlTrQ\nMQJ5/9vM7W3JBlYXw/gsEFD+ojkT4f8dp3sMqvkYHaetRhKFnAWV48TjdUsx\nek4aB6KaLhrvw9dErtp6iPxamY2qlDGwPH4sL6WBgO9/Y07yNyx6/khRP5TC\niui44VVH79jzcEpgQ4G98iChGpsV90yuW1RtP0ZKBlkrHDGhtP//GNsRaWM0\nrYxcIrJG5H2+NKCyK+DSN0MbYpa8pQP9svIaOtOWDDWbiQLzbPtF4b65WHBi\neHjzzts9SmivolcHMP+f+Mq2/k6d2horeo1C2Jsunth8tK0wd+pbev3Sq3dy\n757X\r\n=fwMq\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.2.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.8.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.60583fda","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.60583fda","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.60583fda_1534342532956_0.08467199364738498","host":"s3://npm-registry-packages"}},"0.2.0-alpha.587df802":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.587df802","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.587df802","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"48b5132873e18110a8ee839c83a941d02a429b01","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.587df802.tgz","fileCount":156,"integrity":"sha512-l5SBy0zBQyCDo8Wx8iQJW9p7OUMcaLP9zUwrZIeeNODtYWlZ+bbls5b7LxUCGZX8F6BOuToihMMUFO+bW47+jQ==","signatures":[{"sig":"MEQCIDKsjpDsmw4rmP8F2sK2h8VgexexnFoMSNLK1ajknWxDAiBD5YMNcyEkZ6ArqfJGxjAMUPr1cSwDpd7DpgU7nCk8zA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310095,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbdGlDCRA9TVsSAnZWagAAOrQP/j+XcTVVabp16mJ67p1r\nNtFpsA8y8Zg8Ai3KOYnewLCny3xLttPzqpbZSdWCvIpuDllivnCgNSeQyB4R\nNlR06f6pETfdiLviYmP7xf9iQKc/NLYDPXUBtAk2PIyk8T9uPQaMSnk5ANb9\n1YG+jXKV9OyN4zT0lBXD34e7jG0iQIAjV9u7fqA42baW7edtEdnuIs7bxGUW\nZckl2IxJ4MEhGY8np1KCeJrVKgVORJhotW7ahPx16/YOcWiNeh/m9SeGuPks\nnu1qav6jRAELDBW1wTAbAQLzNkqwkO+ZNveDib2Eigs34IPSghd9nJY6tpcb\nxlPXvZvaloH7UUJEdoKprDBe5HO3XLeO4h02kjnZg00hutg82EsdyV+E4RgJ\n5zTDBK6RGCUbcclpOOmtdbdAj236YIym/8UegkxjyZmDM3spO6zfu74A6FPx\nnxBYozL+9WPSI0909LDzllOzqXFiVVXAIx7WS+7osG/wh4mV9LG+HagZ0Ai4\noQYEfIdwGVeF91P9Q5gvChoghvdMK8AcO3dEjJYi36N7LCGjPc1EmOOuOr8D\ncerbUmw2BezZQN36VupPOFSi6d7RqkSk121dMsaKCBzE0+/CLNJV4leoCcea\n3Xb/zqKsc3/yt5wYbbJrC8WrzxlTd4XaaGjJVINhJJO5lgkhaaaM8tMPvUSo\njrb8\r\n=wglR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.2.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.8.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.587df802","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.587df802","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.587df802_1534355779030_0.4654405857064261","host":"s3://npm-registry-packages"}},"0.2.0-alpha.26a8dc9d":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.26a8dc9d","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.26a8dc9d","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"4f6f54cf83a42a1d2840d92d60c7d5fef7e53338","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.26a8dc9d.tgz","fileCount":156,"integrity":"sha512-C18corAWMCOOgnB46r2YgBq5QRiXTYfWBzmvU+0W19WR9JJb3ikQjUYQdPGZgVdFuIvbqeG85KXh7PQa3RCV4g==","signatures":[{"sig":"MEUCIQDfRgL7ju+tuZl1TA3LL1c2cURwoHzjTk1Qff+iOhYipwIgcWLQo+LRXw9bzgYtRU5JqpLxpM5Jjz71yNaOq44mbBk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310083,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbdHC8CRA9TVsSAnZWagAAFuMP/i+qpQVaq8IIxjN80JJN\n3AOOYVJGNhaXq9ZpvT24ggrDEqaTHw1rUUmpU24oTeHK0f7LiCyMmRUEl1Li\nhHpMUm+Po0w0jK0oFLvKIkE1nf1l9THx1gu2qPJ3qurQk2VHwo8MhQi4MQik\naMLj1j977S9GM/IOhCCCFOuj0wwH4LjUbMMumiehd72YHh8c40VbFGv3tr3a\nV+UbObKzRs9qlfuiWdCbA4C2nKeVIA126rRqRpFtqc8QVppoT2XY0mITZlXU\nXe1COmZI6EttCq2g+vlUDPc/CKcgrUBjzBphWApkZ8pU6TxWNxR+hEis1xrx\nS5TYVYbcUneKcxwNfX6MBmE6g7RvgbUHXywU7so6ASm1oyjSiKPzMv/gjRG/\no/3u+3GUdPen1xwCyVW3gcgF05mpJaUqe64OYuaZGcmIld/MoWn9dlhr7jSk\nafhVe2rhjd4mTQzHFu/4eKENW7gLLSIEQCxjexF4TLLS/L7Cnl5bt0TGvPH0\n0aeqVFQPtoC/x8xkHIlqUou8oWHvJ7TT4tA71Af6Cc7bBnq68A8pjzjjlId8\n4uxtJkJv1mr6AjhUwMA8ihNyae1n+zgEBDQ2yKS5rlCJ/OKcKEJDdwozqoLU\nYf+BuCbu1WfsmLuMi7PXGyYU0CiHwvrLrzXpCdPnaJ/YBYJWyoQAO6k4Y9q0\nnOkc\r\n=KBpB\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.2.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.8.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.26a8dc9d","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.26a8dc9d","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.26a8dc9d_1534357692023_0.1565011725148766","host":"s3://npm-registry-packages"}},"0.2.0-alpha.14a5c57f":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.14a5c57f","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.14a5c57f","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"00f33222cab537227dfa9a5518297c9eae2e52fd","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.14a5c57f.tgz","fileCount":156,"integrity":"sha512-rNS1vYbdDs7co2mUqAdYkaCBS4ZWn0ITXVItNykVDUJgFgKFoP8NDk8Ib5UYFrJ6+xqi8OuAwgXRfEWqGQn1/Q==","signatures":[{"sig":"MEUCIFLbrkGkf5zFxF6s7IVOuYF6NSSUs3rEhN4ogftuN4Z5AiEAwoKs5iQKhXVQhKmyqGNmfOias1VTavO1uXWTYwk8Bs4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310098,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbdHyQCRA9TVsSAnZWagAAUCIP/3rpKOOIgR9d8CCUavY1\n68wm36tf1w92Wzc9pzsihEr+nanK1ymlNRdft8RFj32k+k5HUfKeIv0SyTjZ\nd7B4VE+Psi/ghiuBi19bZ4hH4ibFplmMpiRdRc0u7PhSQYxELM1nd9Y7yk8E\nl4ZiqzNxuieipdnBNPVe9i1mkuzK3maCUUchCBFmAPG00Mm0JLF4Lk4Oav7a\n7zspt4xDpXzRLyVcj0eNrSORGzhpFsSk9pZvtoSplusVsW3iWkValqOpPyJK\nTyuyc6tle/dr2xBCKF5V9qpmQ461EyA53MLrkISqv8AVtYWLOYztXYPIlpba\npiMoKmIOhS/Gxp1GdvIKQiWXWskHj7tRyHnxUbK4KQnWoZM2dyaGO7Yv+47m\ntS+v1j31YM0uNaLzjUXjY8zqY92tUVksOb/QJagaBooxyXHXaeaaNxoRAJR3\nCfvW/V5mxyxjez855N+g7QO9lcvrO1xOFb75mfzleUbv3/vxrPpfB/InvsKJ\nTJIUuOaa4LUfSRTdubne95+jTnS1/9fGJmXHwRn9zbwF/QDjfAh4s727Rgfu\nlVuEPyg6JMLmAFrimd6zrwIh9lrh4AuqpwYQLEbAVLKd8eCt5YmJYbdyaxwg\nX1DuEZELB4XbfAM4Gdqy1IyxFSwfz6nrmGw67sg18hyykjt/u1KGWtxEtwnc\n3YqX\r\n=aX9n\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.2.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.8.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.14a5c57f","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.14a5c57f","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.14a5c57f_1534360720635_0.9471000873878408","host":"s3://npm-registry-packages"}},"0.2.0-alpha.a7e5bceb":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.a7e5bceb","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.a7e5bceb","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"ca44fd2a5b2a64945f02e3a8d93c04b2811f22fc","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.a7e5bceb.tgz","fileCount":156,"integrity":"sha512-eBaNNjNU6+8T9vnDjrElUoko6eO5BPns7Fye+kmMop0ZJGSe/Kl6qT3inog2safP/rRz/wEri7gb8UrvTN3+UA==","signatures":[{"sig":"MEUCIQCa9e3DROdls2Z7CjIHbg+ZtTash/DarJ/awi7aA+Z5lwIgEkkFuYvnKU2/nsdxOmSmueV9A1I9ECQvJwDIq48wDiY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310079,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbdIkjCRA9TVsSAnZWagAAeZYP/2mMAVlo0Trkj5bM9bC2\naAcSyYCUYeBhfqNyxlXd3wnYb/OQGs8VIAJPFfD13I9fLHv+Yy+L6GXIr+ae\nViwBzi1H/3moqqxp5To7pfA1jltP08c2VGmc92zjq9uaiLg25LQD9M6+L/Lu\ncnHphuuvJax/wYvt930yKo+4b1bDONpxnOVFaS0IZjObvDpqvTWm6DWnYZNK\nFG5SR24jCHUEpHryMNADTJGViwn9Bq+iZvmw6CYexk/dH7gdSRaqoWi+CoGZ\nzkeokaRhHOH3rCexwK7M4rD6UWaS2gEUzq63gskOuP/j200IoieTicghEbfL\nu/l1Rae3A5bSea4axtAt7v9A8ou7CfL3E1zb+1M9sNq63d1NQJNo3ffJSquo\nPgz3KJyPrnAgwGtvtZN8X+me/Fnuq/+b0Jizl42ycE69VnZXGgS6+Lg/CZTd\nkJQErAn6tlY/Knn88uP8bKeU0O7xwPYKsx/z8SWgEb8wqVvKU656m8YFk2tj\nuYuQKHx53eCRNLj1E1MJtOBt6sNtzSZgxiUNGemt3zKQ7ZxLOqNnqrHMvfav\nytOSHPpa758wKUpgNuW+UIdcwckcLuZ130DrNkxyRjbD2Mo/XKruxvuDTmu+\nZnomgy/NOz/iQdvBZ+T+kmPg0Za5UJ+Pk0d2PcZRcu637qhEyk5/vC6TrjWP\ndv4Y\r\n=indp\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.2.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.8.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.a7e5bceb","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.a7e5bceb","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.0"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.a7e5bceb_1534363939187_0.38928820487540383","host":"s3://npm-registry-packages"}},"0.2.0-alpha.f4cb1884":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.f4cb1884","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.f4cb1884","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"fe4ba711426ce1458fbc2e166f2514782ff229fb","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.f4cb1884.tgz","fileCount":156,"integrity":"sha512-lj9AD2rWxroFVTopvpy/ad7T0O9ddRA5c2E9wdttJtoM0lBE2gsieLeYzqV/XX1wjcoDoVkcBH9uiSDcXGPaoA==","signatures":[{"sig":"MEQCIF8xAay8WDtnoO5A1+ka/rhia6VZ5fnOkX9NOUogeAJRAiBoSvZetc1qyei/y4c9oQr+CIZsPdhaII4RMgYkSHYTIg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310244,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbdKVPCRA9TVsSAnZWagAANvUP/1iwBR/VMsMqzqOdTV05\n1cXGmiz5uUBfUrgss1Wt4LBC2OCUnf1KzsDCFZgLGJaqXUmuxE7tlUGqurrg\nAFBYkIY+bxtZaTxwJSb1xyKAzy0EWuj3vdv8zuK6UHyowj7jRyjoemKeWCpQ\nKis3IZk62DZjg7WY9xn6zgw36dajXUHgRW1nu71wxRsEIIRAhbFdjGBaWpQm\n8Rnc74YlO7Y3l/xnuOv7o1n8BSu8TnuLH/7bowZtGVdmfa87ZCr0tFlbD0/9\n5rXwGmfLU54dimNT2Z0eCpUICdcENyVGbE0ZvLQK/k/UivHzA1dcxWUxPR0r\n1xcFCOE0grCDNjtmAOjDH5XlGnhKInZuN7zBJNdiAYACze60zwMSBR+wJvrN\n0TM2EGhEzcyjHLzW8e2xO1wk0wbC/RRS2xrApVcZyPVPK+0xSUQbRNGuPT4C\nC0qaH+fFDANa5Kfhj6iKkjoD5E01wY5uQut1QZVh/FTSLUt+m2HA7TBvi6ZI\n7Egci8ET9KRqcxG2A1siyAMr23e25DFXVbZRjP1jiPCmVwCKm3Yph2Cimg1R\nXxKAGPTOUF5ssAlrFah5Xd9TB/BW2rr7lulz9MOkt4zqxqBQVdRSjX8FNvRh\nGhbY3BG5+OEW/WML1Zte9OPaSiSOW9qR31P0MWKY3eiXUv2r1IwWnZXAEAwG\noiwa\r\n=yywy\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.2.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.8.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.f4cb1884","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.f4cb1884","@brandingbrand/react-native-leanplum":"^0.1.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.f4cb1884_1534371151348_0.690687083169133","host":"s3://npm-registry-packages"}},"0.2.0-alpha.e2cc0f95":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.e2cc0f95","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.e2cc0f95","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"20c7b2d7f38ff50620a1a85947a15eb50426796e","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.e2cc0f95.tgz","fileCount":156,"integrity":"sha512-Buh8iYJh+tXa0FnFqJKuoo9Qw4oCt69ioM1VQA2WkFKN3t1o6TAhQ8h9n2VZWyEoou6rYcKmYvK+dBEI5Ert5Q==","signatures":[{"sig":"MEUCIQCY8Dt6z1dV35V/dFnIhCirxSL2sRVs8tkQilKMBi6WFwIgCnIZm4xsbDmhrRc9KAQxIxAe5S92PnLWBp2cVi9KAH0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310359,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbdZ1MCRA9TVsSAnZWagAArWUP/3p9aXt9xaB3ivurg0sa\nDSj5rQKYHFwMWTo7WBh4/LHb/CsIYNU+UmLrVj0y9hFincsiqyAbg/L1LgCV\nZFW+R4HqActZvrCHC247gPycFHajBDC7+Tn+KuxPSRMDVxZ31xUBRn1JWWCb\nZacI4HcRaX6EEpjRx82HiH/CgptSXe2XTjU5X/QF4/ivrM6pAwMghjpkrCmR\n5exKRSnukKnG4KsYvcoylsXFQF6QaHFTobVdFSyzcsyE4/kqKFJoTG733UmO\n8lkMJ3tQfhaH062/VQiQCpRReneT9dpXDkVs97yY6VEomknlixys4X7/npYn\ncXEGkWf2QapMT2J1pOpDqOZDKTBEl9aajV8/Hps/aNG0Fll0yAkVW+tr3M6o\n5mwOKs7e/PV7csVXiERXBobO/Kza6/NT6beRAFAWQhToeJJtBRK+XC+uH1zI\nsU5PMRPWAv4xIWorJ2W/X/K/sur+pdII19ieBEDR4WE0b3nWmKgN4WgLVTIV\nmZV7+X9mAXLAMmNv1vbW9WGDHaLW3c8HJaYzIPcNTwzd1bd+pmf/ooabRvYC\nyH/o23QGjUS5o3f/OfAlNJwjGlU8K8DnwAd9a1URYYu/CibCjgVoazfGsrm7\ngjsj/o6KbtEwhiwGivh+r1ypZPKE0NopgU1STtsKzjdS62QfMHEEDmp3G12j\nr8zf\r\n=MViy\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.2.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.9.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.e2cc0f95","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.e2cc0f95","@brandingbrand/react-native-leanplum":"^0.1.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.e2cc0f95_1534434636425_0.08079148174903117","host":"s3://npm-registry-packages"}},"0.2.0-alpha.d2eafc2e":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.d2eafc2e","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.d2eafc2e","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"7d878696b950fc95435ee50f10660578cf117778","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.d2eafc2e.tgz","fileCount":156,"integrity":"sha512-3jbyvM+6NGDi4NMl458r0qJ+Vw5kP5vf0kY7BTcNu69NN17P8tiUVVWc6AYY5yCyKBEeYxLRKjl8JkdhmzxseA==","signatures":[{"sig":"MEUCIDi+FKSQ6/Fo1oQyWyUvl54pHDosXJdn4BnnaarM4ktuAiEA7BrhbcCsuudqeDksAKP/MG8JsVHUiLv3Ihza8u4MP0s=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310374,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbdaJWCRA9TVsSAnZWagAAvLUP/1IeszRaTgrcTkXw9Ghv\napNiH+XBZ34djpfijRRlgvpWj3f6FRay22U174RaNXbDzY8MHL6CZDvdDXZr\nMIkE98Hr+6lHZSwG6zRm5rX/ysDWhvhl3HManlWWGOo2w2shmoO3DqqmZgju\nA9eNwEoq3f9e7B4doQ7OIJoSOum1dkrSNQOGy2FOCjbWPwlM8fyafxnk4cs5\nRzGaPUxHLs2+pTlRp6m+cN/0UhxQvVa758RFzj5/JZY39DvSJ9Z2lsnlrlHz\nvAG9BnphCZTgR7eB+lxIQu4JncaEJygoGD2YNyyzIlGsFx/jk11UpGLC0l/z\nNd7y0YoS1ueYi+1/Q3qPGcZKjnfpi+o3heI54/bYyXf/bFDMgz0QnM4Y2xB/\nIhzRez4a8aTZs+4BIp//cvXDKEo4N+nsi90omjqXO2NDdtwo6NvRt/W0XQQd\nxZcovozlP7hADSRgVkr26CTwkXZhS7pRkJZquSM3VISRtppqtLF+OtsgIzIW\nDt2OYhuax1UANx9Ulh8P3qZYoOGIi9VTF7qGKYQhxdkWq8ZFPsDcTMXZgQpK\nwO+oXz1/VCs6tyCQENPNwLN4WYoVKmELoNEox5UeFcIgHCSqhf8I5N7xh5PG\n5TtvDsE2Jqd0mFTXlia4fDnLbDBeQ9i/TVxS1NaosvV/rKvb0HPP+JbCbMa/\n5qI5\r\n=QzOZ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.2.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.9.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.d2eafc2e","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.d2eafc2e","@brandingbrand/react-native-leanplum":"^0.1.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.d2eafc2e_1534435925381_0.8760789518892649","host":"s3://npm-registry-packages"}},"0.2.0-alpha.0f20dbf0":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.0f20dbf0","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.0f20dbf0","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"93dee5bb3a18ee815296c15ac7b255fd6fbe6dc6","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.0f20dbf0.tgz","fileCount":156,"integrity":"sha512-8LwkNzBZWCi0RKYnPRCuhNK9r+7Qoxs4tt0jscJCFqwOwW9qITpcV1QZ9VIWV3vAb65ccEEgpl2iKC06tpv8yg==","signatures":[{"sig":"MEYCIQDmlYDn8sCIBge8a7qdXvxQaBAZ+S+A8EaWEQPRaJ5w5wIhALljczvjpwKyjzzbhheQhq9U+F3i9suWLu8q+m5PexMH","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310381,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbdu0QCRA9TVsSAnZWagAAnaQP/AwkBDSr1vVzzMWJAFpS\n4f1hWibQKq4Ki2kPo+S8Jz2llYMP3QuktqI9S/i/aoknyIZ22Nyv4PzIU7XD\neSqa0OEVBHhrCghwRfULARS4fmEPcZaEXsF/duZ6J28cab4ZXFJwN1FTIOER\nZ/yU8Tl/vEKdNfYpAg93qVn/ASi7GeLc369pqjmwbVk9T1qJ1w6OZe/CliAS\nAuyglootDH41ZR++/AHNdjyEiLJmLTaisbTawS2YINNEMXM6Szq01fjgJg3Q\nTKWRQmUFFC4nG3OFabnDKqaVWFOzMBgUpNKOoFhW0q0itk9VDLaNTn5vDUOg\nKenC2YtAjDlIN98ie2wbmQAN7A9IzQawJWytlLloCJPDSWq7VH3SIGq8UTp/\nrKZoMck1ZsJKOP9xpIUY2nxR25oV+mwOTEvgUwhj4cfKe1+sYJ+Av+vPczh8\nk62M8z1yp85MKBtvX6UhQAwH6fpFGKg9QwCDXxqCaG7OYU3CrWcOUdsoDL12\nVj5zSdRcw0jKSTSOAwI5D411LJnAz4PUg4YsGZB3gvq0C1JzUjeK0UFlooHe\nlrr2Hc4IwtMudxYgKmLHfXiEauh8wHSAIJcf+/kVpHjYh/JNTjvnU9b4prQw\nIMQFF9COU/CVeJOQLPtTRPj8scmTVX6qgQsfmT/Oq4LYNz7UuuP308ogaiTp\nDv7A\r\n=gjsI\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.2.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.9.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.0f20dbf0","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.0f20dbf0","@brandingbrand/react-native-leanplum":"^0.1.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.0f20dbf0_1534520592160_0.8661971654429721","host":"s3://npm-registry-packages"}},"0.2.0-alpha.68b84b56":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.68b84b56","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.68b84b56","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"afe00c8b16e42caa0a13fcd5e1076a16fd58b75b","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.68b84b56.tgz","fileCount":156,"integrity":"sha512-P/wr7h/xkdHCPofG32i4vRhfvyw9KAfFuTR43mqJswgQk0dXzJQ/nmgHzpZX4HGMF6BVAhKKjzghytHyFLM/BA==","signatures":[{"sig":"MEUCIQDvDtymZkE/pkGplS5awmTyR5swEngUyPfEBJJsfH1l8wIgP3t/AZwxwKY5FR54K0C6tIMi/248cg+8hmYWEmArFP0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310261,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbfbOpCRA9TVsSAnZWagAAufQP/26IroaUfq2wohF78+5u\nWYSqCw2X6WiPYXaVmwzQFv2zZyEjlnXpcGOmPctOtloov3sFPRpYxuJIIFM7\n0Upf9o9df09l8SxC2360pIvfo/NoiOeGCywdfyWcVEq4Q0+EUksiyAMvxPEJ\noPsWx7EyHn/kshTvK9uUAoMjibp48U3iPI214NuLLtCDoKV0Y3X+54MjSbN9\nFvhGOD52zAYUs+9cx0OfVNmvnJx2OOjlLnTe3HJLofRe3N/ny0bKpHylynrx\nyM2D36PHIQv+eK6Afqp4DMtkIRJhZUdCcjmdU/qKFSixEcttR5ZYxCTPSXhX\n7s0MfcHKL9O77rnny43Bhlb/EuO0HJaQU6EgNJ91IMbNMG7vN5DfZpHTjdoZ\nC8+CfLOKWl8RSSD0/4V4NmNlMen0DAIXOQTfOpsclDua438jj6ftSREAvNlr\nXyKz+7McLO0B4h4GJyOYs0xdqGtGsw2CJ02PACUHDLcX9jwAK7IVdMZkNo84\nfqwymUhEHBzoKUC8h/XWy55Ph8lXM7LXFJbc5xC/uxEmJDHckCfM4J7DTOqm\n27C32nM2kVDt75QGLFVni8N0AahTvJxmzY5FL4udwzqUNeoFbZ0a8Oppd14P\nzPRjj61Ny9HXvXPKQn4aCr7tmpGKAG3N87JJqNMqcAHWLYe0Oi7iedJ3c7JQ\nZyHo\r\n=Jbms\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.2.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.9.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.68b84b56","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.68b84b56","@brandingbrand/react-native-leanplum":"^0.1.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.68b84b56_1534964648399_0.8147181120090599","host":"s3://npm-registry-packages"}},"0.2.0-alpha.20a2b2ed":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.20a2b2ed","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.20a2b2ed","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"2573d272f139f0173d146cdc2ba2a0dcf3920231","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.20a2b2ed.tgz","fileCount":156,"integrity":"sha512-FJAl2i1Ye1dXT3z/weAtPZsDRyZi9Obi9fdWAcTeJFuGld9Wo+3PZPELnx+QBGQcBHdbNZdzdKabNPiGkFt1fA==","signatures":[{"sig":"MEQCIC8LWBrC7g1FKj22N5my2GNLeA9Urx6RcIjoL4uJQyH/AiB5oKbUbeY8B46MLRFnT8REsVMbo6mKV0V76fWHMDirJg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310178,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbhBqXCRA9TVsSAnZWagAAfWkP/RxyPnE4R7Y7UA//z10l\nXuRyRY4A27QOcL6s7A0FSUlRcwJ51B9JYP7QjfNyy7IQrA3aH9aw02m/ZobY\nF9UGWx6IMyxX6GIdAJugSuNrTJDWE/sMgLDrqm5O54qr2LqPwGWjCAKl6LgP\nOeA52WV/NtlE8d7bEn9ow9O6pnzw5pm6SjeasrvYEehj7cTfG+jEJO7TGSgK\nJLWKyDN+sPX5AIKxMaZXEFe4bCYGNFeqREfYcOXzx73XroDc5mO/xtxUqPi9\nYbpFuZo2t0oDLOXdTJlc1gTY9qpu4BBf8By0fE4a3VCiWxbdoQLvQCAP2m9P\nZ2qdFqY3LoXGPMnp9qFOCfLTmVsf7+AbiLCeqVgfON9SduO6nLhJuT9LQUtu\nNttKMdjv54h+5nlgOGJg5GDQJKx0S+uQK43z2WcfrijT5tV2QNX0lB9RYYCh\nIFAVVQ1WJqbayS8y/8pF9bgrvNBrc4Sc/kqrTMhkyMnKFs7+LA5nQ6ljceh6\nNuQHwKAiLf99MneclkjFgSc+EHyDD80VkDrhAlbkEcD3T12xKAEhEtL67A+c\n2Ah3AGCJViWQprZPLy+u6N3QOIyzKZYw75BNyeV1cYJGTLC+ZTw+bJZGl1W1\n58eYJh6xxCxLj3jSkeosOShiK8/0bYZtro5k7ut1b1ZtqDSbXt/WmMvVIAeX\nlqiH\r\n=8v3h\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.2.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.9.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.20a2b2ed","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.20a2b2ed","@brandingbrand/react-native-leanplum":"^0.1.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.20a2b2ed_1535384214105_0.8862399030365771","host":"s3://npm-registry-packages"}},"0.2.0-alpha.864b0bb8":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.864b0bb8","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.864b0bb8","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"fc1948c0db5f1e8bb5466da0163ef970fc0db575","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.864b0bb8.tgz","fileCount":156,"integrity":"sha512-daMqz0NZrzSDJXkfIA397XwiYZ+Xxq94tT6RTLq2Wg3RQy0bCNGH6s3SCT7BK+hakxRuKRbf56N3xFePbvCjJA==","signatures":[{"sig":"MEUCIAMJNJT0HIrPTHonV5cbxeXfNWne8gXc5UoFVgqhWJ22AiEAkr2sQ3YjjZtjdNO8JcC0a2JRAbsanaNMjabYNxeLhgI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310257,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbhYDuCRA9TVsSAnZWagAAvWIP/2W+qV9Fx5Mt1Se/SNEt\nxHuO1UeumIEbFYLaMo7675hX4Is0eZbOSxCY2KkcKf7FV0IroRIsxQzgGd1/\nLHtFv/k7v/QjEP3wQLfcVvGdiJH0xX9zfBEFnStRU4MCGFbnNj0GNrWkIvox\nMljqOL0V3VYt52C/hM6W50oGGg2XyaUZA15NWVY9FGb8u8IE6dpBv08lDTM4\nVaaeRay3//Yea+0FFm2whwkehBaOfleCn8cT0dvE4oGUXs7kt8IIptOAlIqF\nF4y+wL8d23wPgaPIrlEfmctbVxWt5luYWieIrVN8aVs/fvUC9t69VQkK9Zq0\nKw56HsU+33BZVK7L/+maMj1sQS1zl1uOBdjCGXtcA4rA+JTDzW3tNTU2nIwJ\n0kNUdR/3budcT2Od5B934S12aZDu4OQQdNxKEAK7UjVOCatrySSMGFe0LeY5\n/pOsR1Ny65lFpA8Z0WHeo0vp+zzT/9Nzfr5YKTsszmNGG6r0DO5fjL3lAOnv\nkZ6aN3+Gt1mmg8SJAE57I/VH+QcWnFPKKWKBNAF2qqzIC796H8Vik5Ltewth\nl78cSw890KhSrdOl69Nmi5kGIgPI8b10ZzaV3Hdc0lCNR69iAmYeZObUqcW4\ntLK9qnfVVRKu4AeL+/uJy8aokBb+R65e6rYIcRbZmuox1Ce0K6+TQoLkn941\nvxLj\r\n=vwCN\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.2.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.9.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.864b0bb8","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.864b0bb8","@brandingbrand/react-native-leanplum":"^0.1.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.864b0bb8_1535475949893_0.4157259440440204","host":"s3://npm-registry-packages"}},"0.2.0-alpha.a564fd22":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.a564fd22","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.a564fd22","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"50441ffbcee04ca948279a4cea560560d0390325","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.a564fd22.tgz","fileCount":156,"integrity":"sha512-9kxvsKuN/R8bUKv5HdDOS66kKeReGWdM5Jw0P9OuNHPu7wHwWtnL6uiMtRiVr6nRqHjZ7AMsQfuKsvAVZzoTRA==","signatures":[{"sig":"MEQCIAuNpiStDq1Lbxeh04Z3koAgKLr2ZokRjUASYE1K4LsaAiBvAYfJ0b50wSDAHYw0fMS1pUnCKwpRA4o6cAbi421ofw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310267,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbhuZaCRA9TVsSAnZWagAA5mwQAIKD6haXXWq2Ej0sn2FZ\n5kMSRkwQdLtSC+QkYmj4D2fgoIadirYBiug2/ffCB1L84jFWuiApSaHIX2e3\nkeELqOQ2+AZ2mF97GyAWwRfZUk+bqeNO/QWGzVnImJwKyNNAghrKZjqmR03g\nolZlLa7p8WqkqPnZpLk53Um3yZrUiWjvNIchB2jOCGI5f0fpoxP/VNleHpdU\n7iRvFt9Fii1Er7vZiSZJrmLzVtpkhPEWB1keOLPsRWwF3OgfBXEO7XEz2l3G\n2SY4W+pzSqBgwaCQhTm57xeZ9oPMzgDlypENUCB69YVDl8c+D3K6ts2nVAzv\nT7K9e95MudoFCcmzaeNrfFXVRuEagjyRgYPDoA93Iuq+nXFNmu8mOrPOXInq\nlqGPuX92lx7TekhdoshQAsN09zVPLd634KO+n5IoBrGQL/oS3MmmO8HaQSE1\n9HE4vFVvYSZmePtdZrGA6Raz2mxuH13hVTTmmfpKpg3xBxJJUrQbwcyLvloY\nC6dHaospNY32X0xe5P4ZfPabAaMOu340cR3xH5vEvboubqFzrtPuHOgELnL0\nSOlBhcLVWeBMxvF4Kn1nfebDpOCkZJZ/JmlfezBOZcxps8AvJ8xfisyZSJEk\nye3jjgpU6GQj9UtoDTqjGbuW1Z9BqN5ZkNm+1zNEFBys4NQuWO7Aq6fpKH/6\nnmhX\r\n=7Txd\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.2.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.9.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.a564fd22","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.a564fd22","@brandingbrand/react-native-leanplum":"^0.1.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.a564fd22_1535567449940_0.5464139104514392","host":"s3://npm-registry-packages"}},"0.2.0-alpha.bc4a19f7":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.bc4a19f7","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.bc4a19f7","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"b091caf10492ddaec9b6719a9de93383a2585935","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.bc4a19f7.tgz","fileCount":156,"integrity":"sha512-wFrH9Ddsd8gUiH73vxpmhmd/ggRUia3Y1Jn4cVkL4OeLK30CzqLL42uofnkCW4sZJtaTKfBrUtW57xi5/CTt+g==","signatures":[{"sig":"MEYCIQC3lwT95jWYf+xRCopC7fixt7gFj0HRd+dEf9xfKkjRdQIhAJQHlgfxMwvZbFZHdIZezDoljlMhqnQ3Ha80CbQS2HTK","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310236,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbiCwZCRA9TVsSAnZWagAAH+gP/RzunoM+UFvO3OyIbgYd\nszqinAUsXj8JA9ephc7V+qYyqLrgHA6y8DwbKdaYa+xWDYHowwgStX1GS6I9\nsh587NdsKEhLuZGRTlr6roths+Uzg4XYOpW6Rah0cAnOmHRNpUtNHDKPpCnx\nauIN68jnoR5xeF+Jlxy87kYGaad2eGvZqpvbDbftwXWWqFZnE/MqhHktuKrR\nu17kio5/kGya3PrQYK/I46ugxPrlg9M9tZyL3odGjt0kxdiVLEDsQkLE7Awz\nLd+pRk8Q2wC/BLHWx3b0cXufZPuV/PlVnlD4RgBPl+eU2cfCc4oW/CEbhjA1\nIMRRXfndfpLUxPHsWY+99sYnoo762KVq0TjH6eEHRcmJR5z7L/1kU1EgwKXM\nC2ssNi2oKO/2tojzRsNxxLgs54223sFCpU8ShEpDo9JSfLZielXLUvhYZC/C\nQ4paXOm9L94RA1CWGnrTEdtWDk4KYU0zenVQRiabvUOAcCNRFQkkzSbQph2z\n33XRVUc4SPvYkoZApJ+eKs2gq2Vi95B/GM9/WplYl9MZcd3JRtyhg2GqJ9/B\nQVW30fTx3GAkVbO+Av9ubdWQ5F5mM4nQPH0kbNYbQ4QSTUVy9QIarOh1y/rn\nvJAeiJKO6fGJGx3b4uRbouTaFfqn+koHBU6gbANRYCLYtv7Q1exHKmFjNacZ\nS8MG\r\n=D9d5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.2.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.9.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.bc4a19f7","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.bc4a19f7","@brandingbrand/react-native-leanplum":"^0.1.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.bc4a19f7_1535650840813_0.7380195747422917","host":"s3://npm-registry-packages"}},"0.2.0-alpha.0bb130ca":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.0bb130ca","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.0bb130ca","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"4c66d16a0e2a6966618e031929751e93f80fd566","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.0bb130ca.tgz","fileCount":156,"integrity":"sha512-fPm9JtTfTmVF62/8bJUUhZjXDWEpIozI/rSPOWB0QYX6hrzQwAFqmTB++4tXP86ptRgpzDimUtxxe5hI6vfNxw==","signatures":[{"sig":"MEQCIE8LgT+3fHQI28GgMn9B/O4mbcYA8/1pplyG8MbOHQseAiBog4dY4eE988VqEZxzjcnTL9MaRfgVslvnbVub4McaXA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310269,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbiDLgCRA9TVsSAnZWagAA5rAP/1IRTxBmKkn//e1ndgas\nlNCbiA+SwU5eBfSKSBGgAl12YERUDSpsbOFUVCKbQSmJjCpFB9OI5UkxCI+2\nmIkfI2mjXwcaPNVH/UUQjvZuYqQge4o1ktSjuZY0IJJk1ptq0Aa5x/3GRKS6\nkV28hxzH9Mg0bjJoia2Il/gf/uTzg+3alPmwYkUCldYHluwMakYorf8lOuzW\nB1c+cEB2A7Xy6VZgXw8LevFeZvM5fno/49YaSuX1fgyqzz8DtiXOwy3UcRYS\nisrd7oh++e8Xef00i0FvsC2ePOsp/2CrIYmgoj1rJgqfRnZpbfFt8PAeYyP2\nmZwgFbtIkf2ubeyTeRSvAaUigzTjjpxJ2Dhos5/5l9Hpu5vuwgQPdH2dWCSH\nCfha+vCUN1+oT4j81UT4sp4yShdUdRReS2HQBkNTbFtuAPcCqrm7/eqmWctw\nsYk1MIPI1guAvIsm4lD8nMI4SnCgP4yyKjF6wxDSaXQTpwQp9xisj8Pbcl5q\nho7TwAVpqI512G/HHx7+6eVbIoNHTCQ4GMqqPskuYeE2FCLXe2f6USgTDmrV\nVXXMTb4kniXeULXcmGiVE+izoyRbAi5OZZ3kLah97CD0T0/aT7UWMNuE5oGL\nn+yH/3q9tkMFax3YYdLluAsh2oGDy8Ann/h2X8cefnT7zfTR6qB11fmsZTMW\n4mpo\r\n=VZbL\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.2.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.9.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.0bb130ca","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.0bb130ca","@brandingbrand/react-native-leanplum":"^0.1.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.0bb130ca_1535652576131_0.9921272503275149","host":"s3://npm-registry-packages"}},"0.2.0-alpha.837469bb":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.837469bb","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.837469bb","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"053cff06db60a3008ea30491f9ea4816ffe54f71","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.837469bb.tgz","fileCount":156,"integrity":"sha512-2HVVujIz2IXdrsjBc2eJXjyJWb+cznyJTkv0VmMHI3blv/nqQceCdeB5T7QFEVYZCeASD7zW2zfW5r32+N3cVA==","signatures":[{"sig":"MEUCID2XBbscdZPBAPOYTwBbeEfMgOaVTAx1ldTspcn5Lth8AiEAs1KCnvhyyfv92jsQdIowS1CCn9JaoXjf80aRq2n/TY4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310243,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbkZ0aCRA9TVsSAnZWagAATYoP/iqulcCOLkLd6sSlSyXh\n2ZdyfoK+BHWsPO2yBlEiGpaP6A2rxWm4d/ihPBWEbUb4CopNkeng2CkWpafT\nH0llBwmMm3vlUQkbla3jnug6hVT/Iw8VcMbKOlJqMiMHrIZWSkQbREaTArCH\nVUe/q2qpgTyZ7ZApNCBcJ1xLfLAWwVQiAyA2WayXqN4qB0ha4aGezqewj/y8\nHfjENY7sokLsNRoXL+e0PXOfcPS7Eh3aFkKYYk1u8briK2KdDQoQQEf7zZqC\nvHJ+PGFUdPxYQUjiPnCRcU4xuv/OkOMZtJBdluf2Rjn8e0tNNebfwtl6lSwV\nz4IcUqMQjaWHWGjDcmztOJbonZCVCiyytjKqe/KTQ67hMofl8Edn2dJFxyRI\n5ocr1eUzIAa/pr/IriCJeabMe10PpZh9VgciT5QVOSd40a4dpoYOWLSHa44v\ntyH3GpY6bVuu50WQp7V/Z/JyIDoZ/8+XyxFktqOzd3FqOMWhyG3ROs0uiPy7\nR4hizKkpkFWzTnP5glhllOiBteXbEtv6DU6eZJTiQrjt+B1ARFo5yWiUuDz5\n4G3FMyspsJmxPq/EzSw3F/ayn6l/cWf9Ejw/iHnaOtD7wSAJLfT3hhHds8Ru\nCCICRNq5kxqjBpmTZQbNIX3ci4Wp3jbla6TpXYYIWs2s5HzDeqmrvBydiDw/\nDw9q\r\n=ZIWZ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.2.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.9.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.837469bb","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.837469bb","@brandingbrand/react-native-leanplum":"^0.1.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.837469bb_1536269593705_0.006360042268711119","host":"s3://npm-registry-packages"}},"0.2.0-alpha.be87dd01":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.be87dd01","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.be87dd01","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"af7f1f58252ac42ff025731a2767001c9a5c1ed9","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.be87dd01.tgz","fileCount":156,"integrity":"sha512-f43j5VlEelWq6DKM9fIig7ouxFxLLO3Z2CmHbrfbUq9oXq1ELbHxOSuHzoOwak+1+Fp4uj6dzpMGwR0hgkkwNw==","signatures":[{"sig":"MEUCIB47zHZcKDvREMSWT3rpO9rLO4p0F5UyG7mHz1GHK7LhAiEAvTlyKsJ2m8jugNaKNhcGTSLuAhv8jqBU1i7mEoxfPnk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310248,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbkpqxCRA9TVsSAnZWagAAuo0QAJL5O8rhMBxG0Da43HKi\nm2UtKH4ENajduugnm1llEH9sNqq9PYB+tn6ymNK4kH6Z/3/0XdfsRYlsbKQy\nSf5Mbh7ZC99//q8cguvd3XiM9ftwTFKXfBojqC268T0CFbhbpnbYdrrXVpX/\nCgYax2hrlKvvjKeFfVYVpEt5ZnsSAjxh98RLLKBNqy8kZ5oSECEEVKmu1rZq\nkfDBPZFihAS/f9CEODwoLcSAQiBrxSqXRupO8i1rc3g9hm0VBrg5PRcpRUMo\nBkQOxuYz2baDXisMNi0YMAxVOjLm7AnSkHP+uuCxD3i2hs1ph8K2g6+OGMCE\n456WTo3d9f5dlxM58dKtAe1wPKVZCuvC0kARqJqTSAac8+2wKEr0h/jg1M3O\nKJrnf7fCA5B/6wBJ7G70C6cAHpWTUGttjIChKIcjzZW9dMfxe5H1H2DCorrz\n1EOC/lz1hCefkP0CIZY57bA7IyMTBl5/muxeSQk3h/8Hv7tRVOw85RTuWdcK\nYb6hPBMyD7CHvk+AmCADhbqIZ61Ui+7bchXuQrnMKreaoIfxHSwFI9Drt50p\nyiHz15iyJuEAbA3RVryO6VBCFNNG1CbSDv3dJhx5KDolWpuCKe6LN7eC2TkL\n/LGFNTHTvYL9Yg+gnF84/9xmagHWjAxymvwDf2Ke9Wrk55K3txfHWBuagLIc\nQIu3\r\n=V4zU\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.10.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.be87dd01","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.be87dd01","@brandingbrand/react-native-leanplum":"^0.1.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.be87dd01_1536334512991_0.01788175284867699","host":"s3://npm-registry-packages"}},"0.2.0-alpha.3f287a06":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.3f287a06","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.3f287a06","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"e1804b663364a774a96f014872e97cecff72bcc9","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.3f287a06.tgz","fileCount":156,"integrity":"sha512-48ZwD1SAIOIo+kB+wrMgkSUiI4xtAynRYB0fy+/Wlu4prnvmTzOFtQkz4u52PgS3JopUurU9NZgwijhxE3+5Ng==","signatures":[{"sig":"MEYCIQDVQmjEjFSNdE2NN/tMCHuPLWvUEj4FGIMH/rpVYkSFTQIhAPAvYDBjjujrxawe1hTk59Zts2L6DlOc9ysgVDat5WCm","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310240,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbkq9WCRA9TVsSAnZWagAAaUQP/3T9UG7ZaANW8X6FzyVf\nsNlTH7kKZOlO8kmybOOAQccBmH4XsTe9inGrShSCXSf0E9b0THiDYcN5qWjg\n/pz5oEtmeZl95BHQ9FYkE4JsB22zUxI55p3hVdJwW58qlAJo1PyqiKdvBUEr\npQQtiKhYQspuvlS5ovofV8zciV/SuqKHdE3mOtXJRyQ2sdQAhFTnV/VpZH6F\ngqqietic83j0Zw5i2VY58ndhpkCEVXuRa1Z6Qekird6/uYljUFH2J/D0maHQ\nrVnmwGeOPSyz3NMLEzZtZJfj//0fICA/FfLWbnRK5aFIdr9I3IN8OFGb9SOc\nZdxMYqHYJwvsCPrgVpSRu1YqNSxwHVcVh2IPgbw++JD0DXQjFyV5AxW5r1CK\n5x4wtuFCZ/Xbezc9omcSh3m6CWVEvZbApnokm9ndacnag16IfIpbiMTtZSIo\nOgb4/m6X4R4bAklMw8aQo9lYQGlGo1/1QHeR5nYmmwa7n0w0xvZ9+JiP58XE\nIX+PU8gY4GWuG9Ua8uwWfTI/HvXWVCukABdeDlFFq/1uqJg9j8kBV56iszZb\nlwXv02op7OLHVQHDnWn8a29r7kfURTjEIVFD1fIKXwBX16mKHwWuvo07Qm10\nT2AS5doCh1ZgzE0GzFr6Ti219bb/1aWLoT4LlU0Iw6gZNzl8teqnS7zfjKhx\nHdn4\r\n=S0Fv\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.10.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.3f287a06","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.3f287a06","@brandingbrand/react-native-leanplum":"^0.1.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.3f287a06_1536339797108_0.5115142268486494","host":"s3://npm-registry-packages"}},"0.2.0-alpha.1adff63a":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.1adff63a","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.1adff63a","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"f402e81bf688243d249f11f0b6951fef1d89213d","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.1adff63a.tgz","fileCount":156,"integrity":"sha512-ucorZypKl3PK7/iwQfGuDhtka//8myfMILYKrGSJTuzEYvP4pc6mS/VzX0YzqLksBqLb0aEFZBt34uLNPML80w==","signatures":[{"sig":"MEUCICzJueuYj43YbFk05FuPHTiFRtqbkjYH0AwJTKr+geh2AiEAxt+RtmYY30TFIf67hfo3imvF2du5HtWvmCrF8eFroB4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310225,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbkvKHCRA9TVsSAnZWagAAUWIQAIlLXODbVeeF0qEniDry\nIn++88yKVO2Gdbqqerod8ZoWu4qewlQbp4zye331ozKBddcJfYMTvaJ/kmjP\nR0xpzoAyU++bxOZ48LIeHysfSZDu3zRDkR+zPm07hey1+9zydQ1moRIAVVRM\nWapcefsQPWfM3Sn3w9QAKMFppo+m+nadC1iFn+q9HB5rKxRS7AL3YukicZTe\ndwAUxJhcAC/r1Iqb9A4N0+KtCeAQC3FUPYfqr8jjrrjc6YfEb7HR0EghJ33H\nJpURRz4xenA9rh3n6Ie4tVUS83ra3DQUUPcY97qJ42zKi7Qae+yBzQUQu3OI\n0Mtkn8OUoSDolX4XN2ZZuw/9XSXn30fRJLxb79+rQhrtXQ+qgrJUJfB+u4SH\n8lZoH+Nf/U2Hs4SbpxrONL3d/eoNqV9g4O5MPseKLHFg7z8udiholwGFu8v2\nMwhvlxqqcYz217PySZShRYZWrw229HvohQJ0EqWmYdIT6c0AawMm35V5P6Po\nd7m6eOnYq8I/RU83RI4AbOdxzEGjYOPBIRaSycDCsm6kXWb/gOHB5pLcITIK\n31LmsNvpFFmZ1ke/N2LR0Lt4QC+O44h4dNADoFUBt3WXQJhn3xjV1mGA0yRN\nnIj7FMt1wjkJAFZOzrPQCPExLe+rAu6msID3Em3LSgkdudThdplXKBqvB6ah\nT7Sn\r\n=Pt6b\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.10.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.1adff63a","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.1adff63a","@brandingbrand/react-native-leanplum":"^0.1.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.1adff63a_1536356998459_0.24617012185340537","host":"s3://npm-registry-packages"}},"0.2.0-alpha.3bf49fbd":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.3bf49fbd","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.3bf49fbd","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"9059612f62e1b377e91291a006630642001f4c3c","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.3bf49fbd.tgz","fileCount":156,"integrity":"sha512-ICyn5LXPyCasbl8lhQreR+bzKco46n3yqriYbtoHI353NvRO22a5kX084gd7NwQRgIeOwknrNEf9ID4fDSoSYQ==","signatures":[{"sig":"MEUCIQDng6MPnDnqUd8HYJiZMuerr7uV0Daxm/KTVroTI23i1QIgbu8WBWJdseEmdk10SYHDRJ1fho/gPZXjyFjKTedH0FY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310255,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJblpKXCRA9TVsSAnZWagAAaJIP/3Y2R4+ruR0W3ez21aGJ\noI4HL69O6bKaP1wyxic8x3D90OrmsYTx8PyH8AFuw6jDa4IDDTmMsNoSUips\na8FUZEabZx6zH8+GpEoeMCj03Jz7wnS0do1zd3v9adleiDO22ZCKSHuxXmBM\n9/z0lbOI8xO6fiHjpmlS9i3X/l5rIk6A21H9EjkdU7Lby7NRUJOZG+X2S//i\nha5TeOxUcRLXe8pBy38SsVfd2SeOLgJ2EbAkUeqyf27cfrdPVwMTiv07xzmV\nsJUjOyziVy9HKD94swtkcY1jc2PHvC1P83Gtra81B6v06y21bU+xznm9oaCy\n64s1P24g689KpMHPjvpUZvTmjBR2t+QTmAPo7YtIUoFtu2lWuq2lLmexysRS\nTfiprguBTJxnlWmST41pzRS20dROd4ikpZqAhgpTmbh2twl/1nYhh4VNCBl1\ntMCIc75sdNRB9TJybsp9eWp/ZX7TxfS7R5TQHwCE7kcTTVVkr/h5+pY/sipn\np4PPHTSzkp6w6anCWjj97dbnyUG/E0Tj33RGV6QcrUdbnMFIbfClZkhswwFM\nPpJlrWiOBD2TyzqvqYzYy7kXvQhFPz4lkgFU+UnkK8Snqv+XSDBlg5RatMsy\n9KVcUyQRcGoVwyvz0tkn7q7Lm5oy/y8cluK6zmFkEgdCMXsOkeINbzusajqZ\n5xAI\r\n=XukM\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.10.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.3bf49fbd","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.3bf49fbd","@brandingbrand/react-native-leanplum":"^0.1.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.3bf49fbd_1536594582965_0.6703563782642465","host":"s3://npm-registry-packages"}},"0.2.0-alpha.7afadfed":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.7afadfed","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.7afadfed","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"f94c69b9ef1d98b5ac4b4c2ea963cb77259cbfae","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.7afadfed.tgz","fileCount":156,"integrity":"sha512-SvHyu06BgtJZrmm/QZeXckc4IPuiCn08wA3nuZOR66v0iCbtRpcn2xoXZdZyZQqcQL1qWjRjRZLvO8HpjyMOeA==","signatures":[{"sig":"MEQCICq3utbJsMjdCs+M22n+9dRlI4LEJbOt1PDcHSamn75vAiA+PwY5hG1C+cNNKPRsggnj4b1XJIu1k0nJJsJqeWRiLw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310257,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbl9V+CRA9TVsSAnZWagAAon8P/0J6xxD8CD0tARc9eMGe\nqwB3j5PTU2P6xsaxpTB+3dGLiYd1xKTxRjDtQQnJ8sM6Hph/EJdXpIYaEJw0\nLJ7pvMxoY2MJj+sHRNYae97FN0MGaf6K2lSVMsOVlE984t3kwFikCenqaxE/\nFRbK8Taz64igKTvQNDCPXCqJZUHl8oDLNh9fM/o8LNMh4SQT27JXfDDkwQvp\nTk6QMes19oTOLbU14H6TfULv82nUYsN3X7ryFC9LzdgM3HU88Xz1zfXQ6LyI\n/Yp/0RTFVEvCxfY3A2m0b6AoQJUsCcmqdtanaQapuStzRy5FORPqL/VUj7Di\nJJoV4wCfaGqmSQIVOjQiGl6NC8UYgUuPtH6Fqnu1gyvyFhDMGmJhYfpN+HNd\nJzZL0hkbsF7v4/5xRrM8LvuaGGJ2f5Ijodvr/ycjpIbadCFgsLdx0x0azR8q\n4VkagZRBrcvs3svo6slYoMFcu8PVuVXCbmH2UsaLFMd5PhAXTjeZUnfk3o1k\nvdgDi+JmQhjMutNY7ha90xNpu6+rDe7VaZy+4PmzKqVw7aVNEA9fR0H7JJcp\nmzMFRBhf80yGJLmPpyiSRUWo6oeRbgIfkAVAIc1QGI9D32YbXfj4/aMlx9yl\nMBXU+QyTrKvaPzjv7pRv7tPrYujYz5FrynAJFIkZwB278IIxuGpo2qih7bBQ\n/Va7\r\n=lcAg\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.10.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.7afadfed","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.7afadfed","@brandingbrand/react-native-leanplum":"^0.1.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.7afadfed_1536677245535_0.19233055657163756","host":"s3://npm-registry-packages"}},"0.2.0-alpha.41e794fd":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.41e794fd","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.41e794fd","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"8e03ae53082f3ebbc492e6eec96dd441e65860cf","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.41e794fd.tgz","fileCount":156,"integrity":"sha512-YMIg2tQJCnIJv9PaTuAke4ICMyQjz01IWBtpAonKnlHvrwHbHUuRvkWFGc31u4qcju+iqjeFJtkAjHZSnJ+uBg==","signatures":[{"sig":"MEYCIQDikOf0n19E0YZEX6uJ2mQkzA6QSvPoOg1NP6KA1+5NgQIhAOuJTDs3YimOIQ+xTvJosw8eJDEk5I/8MuaPBA5qft5L","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310254,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbmB1mCRA9TVsSAnZWagAAkzgP/1HdV068jowS9IWmKfyY\niC+He/5j8SLJ+YEpkFtMhIJUPZEuf7v2sOQwArQKyTM6+ELgoiTCK9jBDcTL\nq7bz8WKgefCbOUZKXGG1YuyHf87le4oi0At7s8s7QpGpkhmKgURHx6bGaT4T\nqEOocoYdROkWvhEEfGy9EfOful0GqY3eWzC2vDDIp0J24J9YUD5UyjgeTh8l\nzTHuWiV4p7dSYPBcsuS1Kk0kMACvFDPviuO9WOH9GYWOu5pomTmRT2lHBCNv\nM6/wWJtL7AN0NWBk6UHcsTHW3RAWyGDC/CVWEJbZtlgSquUMrzF7/2vNM9pe\naABUScmnxcX9cTVFBVqmTzvtRYseaoAiXGQCKEpU8puGuENBdZ464u9XEPc9\nnUucjukpJtylGx2uH6y9N+iZx9ejKxGuH3xjrTi0TjtTV0dztcYScvJOgNGk\n48oydy4jZAp38vXnP7BpxfgD5zeOgAx6lC2xrigNENGDT7vwi7Ju1BVyu58t\nEd1blSaOhvUjI0157txaJpknggZfa4ur3sG1Eld/2eS3fzzuuk+1GSu++3ko\nKVzHYMKBn0CEWgAyY6F112YAxMohIUgXLrt7x7ITNGs44XWDLRWawD7jr04x\n0kVuEoZ38mp6cMl+hnVo+bIjjPFGdDSRueUXVyeEe4TbXR4tFsiKDuwR/957\nJUsA\r\n=nkq6\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.10.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.41e794fd","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.41e794fd","@brandingbrand/react-native-leanplum":"^0.1.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.41e794fd_1536695653165_0.34547838575073553","host":"s3://npm-registry-packages"}},"0.2.0-alpha.bbadd96c":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.bbadd96c","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.bbadd96c","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"89c5181fc2d37adde540c39dd7480db5ab35b677","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.bbadd96c.tgz","fileCount":156,"integrity":"sha512-EqUyLAf56t8ekFnTM530wLMFGVO4qMCXxUmOdTdXiIyVx1XjM2T2i15qhqH7lDsJyKr04b20d5OfPJVtQwzj2g==","signatures":[{"sig":"MEQCIBtxcrBcFkdeiifCXSGOTdC4istzEZeEKHl4LsGYEjIRAiB3adk7wCc5Qck5JAiI59jxj+tpxQ6g+hjAxusx/Y8h3Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310267,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbmC6sCRA9TVsSAnZWagAAXZ0P/iaY9EbtPb2aPoeq+Xb1\nBYvEpwQsMaiBFJwscoz+vQnZwlxtCKOhjRuWWmUMjSMYe+98P0ZuWEBQAUNl\ndQiVA0JOyk7Shzq+M+RLK/nZQA5eR4uHhlCg1jRm2y7+szHOP8+q+dr4Vmu2\ncMTjLT5uaAXTz02nCLcWNQIigGF5f0hl79WmAJ6C3IuFKPS9YaK+Bino2vtM\nnH8/dX2cf1ZlXWvEV9nxUGJFl9LvhrbooEFylSiAzRXYOEObe5fc1b+8RdOz\nwIYw1bebNErsJkaeNBlJggRvhDDsSLOwbf11S6rX7KCEeCzMBPMTT1nTw0Ic\ncg4ue5EfVSE/TYB6vEbN+oVvmB9uMlMl3S7Hop6XsK9TeKGkD02N6ZkAzIPa\nG/yxLoKJR/RZsBdsOGbcc2dkzR0EFL6NTPjjQ76m9/OnAESn7B46FQJzcBPs\nkdmzhNSA738Z/UgG4e4e5WvdpWMy593ddkb0Xq5PXw2CZMvJ5MVa2DXVl4L2\nuY/+6zSiGFG1/DDMcdH+82oTsYva+YTRpLFjjE9HdoQMqd0TGAiqvZigU8P4\ny5K4yWGObkMsq1qP5n4ofNMtGN1QEYp02JFkKE4hfze8PtUxYBYy2QuZarcL\n+UAa0GOypuuRjRlLR1/p4HPyXBuY5rSdJyLpt+SoJM/hFIyaTfG7e/T7bsek\nh4Ys\r\n=sAdY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.10.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.bbadd96c","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.bbadd96c","@brandingbrand/react-native-leanplum":"^0.1.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.bbadd96c_1536700075053_0.29661013771141764","host":"s3://npm-registry-packages"}},"0.2.0-alpha.47bc20f7":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.47bc20f7","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.47bc20f7","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"124bb35f61e368f25fb2712a75089b41c68d923f","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.47bc20f7.tgz","fileCount":156,"integrity":"sha512-p1RSw9izItz+8XtrzqOyQYwVDE26kCJpuml41luZ8PEdq4X6rWdoJFJJhQYJsvse6jklUTpCT3UNGV9fUYpGzQ==","signatures":[{"sig":"MEUCIQD7vGWbURTJmZXqTuBT4ubAlwrFkPTWpVGgABwJM2nVPQIgN/bS8xQ4gIFQh8Z7BHtPYAtximHJG4a2gQJepwDK8mM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310248,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbmTulCRA9TVsSAnZWagAAe6sP/1nVxJj14ppcY7u1bdRD\noaNEd+nnpNMGAsKwZiwRJG8NRr9O6gq+JSRrOp1LJM5T5Cuo8qYpHUPppAmL\nxTWkpJzR8pR71VXr47QFal9E6L1QFi4rIR95Zc8e6TNPQD1Ik5yeg7gYGW8b\nBpsZBEHC/aM+ltOFcxCU/Kni9F2ks8HyfaSAPQmq+Af2VLcP6wjs8XcE5uR/\nkw9A6X1JvUYspNa9bo5FcyhhGVp2qJaaBk69gaGeobj+xTqyQ8V86YAiau4S\nN8MJoNIiNJ7shDAGx25EEL2sVq9SlgXlz6dUc2FmT9pPrnXEei3oHsWBO/0O\niuxvIrnXRNVm25LN0BlSRQrhtM0igQ10BR+5Z2uJYHzAMxMPUwXJJWSPu9Bv\nQKGhCrGH3peolnnudXvg5qDos0aIcW0ATEvgOlyI7Np9i7m6l+MJIZSc/vLz\nCIkM5oZ5y0qZG9xhJWkTZeaxXZv0+1SEh+bt5xMH459ci5h1y3GW/HPy81Uj\nJBWDzYeqSuiqmFQXp10KT8FgtDKYZnYpVyXYuQXT53Jl5adiZXWt3ikfqZq2\nNGb/HLJr6O93D79to5C1YLcxxJt84OXWJCsLUBGCu5ZSrtC3eiWLs9/2+6Mp\nXVee7V7LDwB2W/Krq+msbBgTPTtd+A1hPJ8FaVnVGLHXjUThT0auOa1VEBmP\nJdtM\r\n=JpXR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.10.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.47bc20f7","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.47bc20f7","@brandingbrand/react-native-leanplum":"^0.1.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.47bc20f7_1536768932783_0.44323275665499007","host":"s3://npm-registry-packages"}},"0.2.0-alpha.8cc83689":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.8cc83689","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.8cc83689","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"shanekormanbb","email":"shane.korman@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"c3ada9f8086c9d77d0646d34f93744947a8b1d42","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.8cc83689.tgz","fileCount":156,"integrity":"sha512-Qj3Sq+SdkHbOChyQRibO8QaWpDzcswrAx86j39KEE7LyHb+EIW4eLYDSYFZ/FJlPSgx8UgxEU4NwpoeRBqW6tQ==","signatures":[{"sig":"MEUCIQCsmoL5jmKd8tpgJR8RxdGW/5d2KiHBe9Ct0sA4XZQJDQIgRYY8JcukQw6lmMntF0dpoYTF5FJ3dSoNjnvrfAABc/s=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310178,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbmn4ACRA9TVsSAnZWagAAh8cP/0TCi3/nIPCWmwFDCxYs\ndGSM+yX2byEloHGpv5dqYvRxaRP6j2BLlOuxNJ9y6rCyK4qwtiqwZTXmWyQ8\n7BE+8XyzV9DHM7doc/blzBXXNSOEvfSqbwecpJz9W2k9vnbgBXCpoXJfyArw\n75Y3GUW78Fnz6zmQT1WDjY6aMUwRNxqvFYujnif4rdLfh18fndeL5PdYhjNt\n6EPF5RL7xNxDvYIPBfk2xD46FGxVsstItIhfKgsGcwf452c1wHhPbSGISoCa\nsq7fKqXwA2Yfg/9EuCbK4MdAdcrmSsJwGEMEgITExnv56hhKI3wuFyW7lksr\ni0YOD3SMkMTd387KI8qxdmM/eew1qO1+/8YUwjSSo2nu9Zm6o2uAyi+/hi2s\naPsGyE4NthbOySrQo1ReGNhY9Rc86e6oXzsRWZ9cSN8YYo4ZDp3q+XsVZdru\nxASxg1lSZtur7opOg4I/qqQJC64UyNWx/t2svlOTnbaMeH79LIsk6VtSAf6E\n4zlUqY6lH9kcTGW+NrUbuwkIBh1Z4nyuiWVtq6GyZ8qQCypgKoj8aHlGRGR+\n0pn3HhoKs+NQOnHvEhTqZw6/tU5GUKVWVaXfpVUbIki2mhOYbNRbEWThlVo0\n3mWSlvylYyBLWsUB8aBDDXwVn1NZDhnDZiRNRdANK1X0pol7OygKokxrDic7\nlnh1\r\n=EGjH\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.10.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.8cc83689","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.8cc83689","@brandingbrand/react-native-leanplum":"^0.1.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.8cc83689_1536851455187_0.08625306471520644","host":"s3://npm-registry-packages"}},"0.2.0-alpha.da0f2d11":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.da0f2d11","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.da0f2d11","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"215f45ffbd70fd38b125eb06d4a99469c16760e1","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.da0f2d11.tgz","fileCount":156,"integrity":"sha512-dnVKfeKKGWgg8A8btJgcMm06OXP1oDeb8h55otLge6Z4RcwlP420naz3gfo0IY3MQX4EbNY+InwKbGdtTmWqJg==","signatures":[{"sig":"MEYCIQC08ZhLxe9gI++o+zrp05O2MUAj2E01K+nTpkVTc/tHXwIhAIryVcJ8cNp4fVeQU5JLsc7Gh88/aMkgdDT1carkImGX","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310178,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJboUhaCRA9TVsSAnZWagAAtawQAITFfscuZHWkJ9g1ZAWy\nTzEXiRMuCtv1DSoHWvXda4qySPknWmXH2jhAePY3XIjQjvlkXrRUBxERmRlX\nLT2EpxHGk2qymUyvOvOKAjsfrK9Y4bJ/nbxkb1J3tHN4u+/AudqEgHwZtuJm\nZh3YmnxYPNNGgNXYVEsEc0ClZVxxTi+M4vrhU9mTosVJYx2VxH403dMjfCpk\nNy2hP809yG1jrc26JwANQjk0OA6sw7U9ZtM/fre2I5lKeYKjtT5Jy6e8ICk5\nZQLUMxIUf+k17RJSpth+jO8Iv7gkwEYqgKk40DOzJ0mI03E5h3H9VXPG4YWU\nKwcwGKSVyXt0HY62WYzIBC8U2n8Gb+c3aFww+xpvQZZdqEgUD/hehNapXUuQ\nufwl7johuxIR+uNusHltVuuHVU1uQwNzMZKOxdR6reMSb6FvgUrElhRjvOsy\ndCnV6Xmk+BDASiF5fGCAamWUp3+vghJBmwdsFtx/CGUuJAeaA3S/4ayVtDzu\naXtBDMOQBPTERWnwSDBAK5MTkDyLdQuTjK2wdHN3a/NZL0MMmCllbtCpToRe\nFmOolcI13OHIR91/zGLrvMhB63Hw3ohSYeigm64kr99sc2itimyuFpZXma7u\nahIjaxqpNLMjTMXh4bB3E6IUKRLcuufIRltcnGjK6F9jetEdc5nKiFY1Le/t\nogvT\r\n=FT2B\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.10.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.da0f2d11","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.da0f2d11","@brandingbrand/react-native-leanplum":"^0.1.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.da0f2d11_1537296474309_0.5235154896988579","host":"s3://npm-registry-packages"}},"0.2.0-alpha.f2461fef":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.f2461fef","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.f2461fef","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"4a56189ab5b58ea5b4fdfadfc1db4189ded7d709","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.f2461fef.tgz","fileCount":156,"integrity":"sha512-fO3JAGptlhs0a5/f/2d40CksRLC/gIvO49yXDQ/pE/D3Q3eFRSKxZNnguw1puluedpuzYCqWH3RWl5sh6zEUcg==","signatures":[{"sig":"MEUCIC3XzItJuojbl8UbZatv/OvZo7/3UjFwSQhqAePkckgqAiEAsveYcclOL2T7u8xBhed/SopPCotjPfIujowmfVwk1yE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310247,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbqo/XCRA9TVsSAnZWagAAl1sP+wfdWrMynIWfUlpbtPjo\nz/iowBDjZjdAt+HBMTUc/4uaFw22xwO6idFiPXjl1XS2/sCNF8Qbg/9kcLG9\nWv38z2Ppl7aNNLrMt1V+MMsY2ztXbXkZCGWxre1ZP3l77ALqVO1lcbcCZ+n/\nRjNSLcs0utw5X0H7Qspkj5tm2kxiiXSSFB1FNfyEtovm3AURhOLB+B0tx/Wm\n7oQuFi0TaoJ2aistWys+gXILIyq4r+JV+1fTOjEXBE1FLKfsJmGus8E+z6WR\nA/pJ3thjB6YqTuVsCpyk2zUxDvBvgDW/4ITlFasDMHrfefmVSCGXCOHXPhHP\ncmt25zrAjmXtP5o17fN05fHqojlO6wVfYdHKSE7V60gcVC/TMx+51BNb7ij/\nLMeRESNk/+HsO2KZDY1IcF7GkxLWx6TPD0FM1KwPLDXudqHEE7CJyl9g/kAD\n7xT4A+R5Z6igo/6RhaHJ9p1SLPB7oFgjN9Hwq1nwxWY8C8s2ncEJJp4Fu+eI\nDKJFKOj++TAQGfKTKJSiQIj2udRF5ODnwGM2sM1ihBOCr5/0RS1lkscIBCXw\nbN3EGMC4hwKpR5l7ZzxcJxVX1yvhVdGJcDlePfyQleYJAnSzJ/bBFaQHw/RJ\nxOu+mR3O9Mmqec815+7u+8fVSuZse1FPNLev1vPu9N0zAlID+q3lve84RaFN\nu/74\r\n=RiLR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.11.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.f2461fef","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.f2461fef","@brandingbrand/react-native-leanplum":"^0.1.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.f2461fef_1537904598738_0.04657472324707834","host":"s3://npm-registry-packages"}},"0.2.0-alpha.cb1604dd":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.cb1604dd","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.cb1604dd","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"658e4faadf6719c6d259fa68f8798a0aa852ef1f","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.cb1604dd.tgz","fileCount":156,"integrity":"sha512-lilslSr4+5ngsmd7+qZC8UxpbzSbm7yoWdKMVVzi6m6qkV+Vah7f4OAcatnwz0fOL8CIAnLt635e2/DbX+Uc9Q==","signatures":[{"sig":"MEUCIBzsQWza3qJRbcNTPx+SIqZo+LfqumpGqBOFBxaPCXPxAiEA+QqLgTwftx3FZ0uWuN+lNg+BjQtNnTAwiIe6Y3PDYbM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310245,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbq6w9CRA9TVsSAnZWagAAj/oP/1mkGevvzsU3QsYB1DCr\nXVBgO2KUrQrPoEDPQSirUY/bDgie1bXXuL1TkLN8U+yU2YXL4VqOhBkRm/Tw\nuuRoT8Nv6IppP1WGnzVMUByu/qbhRVGPUxS/tLIVy2c2FCQbLIk1jYnQjOPD\nZMLfz1mljdWSpCToxMURfM8zUeGpKlaVhQTdolbPPpgizt8snaZUvLsVkzVK\nuKHjIiMUFwSrY3KB7Rhyg41Zvshju74VgTVL67vI0GlX63prUiShtXS1+4/f\nXDmQ1qD8fl1QOLncgCHC/GNJ6x1RteLcu7V4Pvod5rB923Z0umxT3k8puHR6\nP3fBc/F6EGHiUKjYra344qfN7VL3ndnuecR943V3+7STPjl1giTN4m8fHZ23\nm6yJXn3mfp3n9VDSQ1nw6zPkN56hEJrb6lkJIlx5WdyzkeIJaGZf0szk2BDc\nILNuLgbh/DkKc6il1IqHfXn0gpxdozXJj+M79kVK3LE1PSule0rymLMQARYV\niVmJTwkcDkx7MNYOaz2v/nHE5z07xz6Q/Cg+QzDp70NST40lX4N+B1EEs+RG\nvCI3qcgdqn2BIfX8D1PR9XoupvQsmWiXvcErN0E6xiQMt251S5nuXWs1AmP7\npjEkYOUs32wzIROaiZ/WFblTeYKJ87cpUp2d4F2sxr7bGsGZu8+yAo7mHQ2X\neaK0\r\n=LanM\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.11.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.cb1604dd","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.cb1604dd","@brandingbrand/react-native-leanplum":"^0.1.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.cb1604dd_1537977404545_0.6393979307723163","host":"s3://npm-registry-packages"}},"0.2.0-alpha.e326bceb":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.e326bceb","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.e326bceb","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"b62dd70c11dd96cd5016ce1a483c32dea85b3e20","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.e326bceb.tgz","fileCount":156,"integrity":"sha512-h9RqjIe5rB5gnpGCMyM1DWT44cBepM/YUCeDkQrSiQYSxwMqfzMmGboLKHV8QcNR0iPzd92Gs+CKWgaIIheOiA==","signatures":[{"sig":"MEUCIAX9GUzD4+vX2nbuNdR5NOQNavd1UwvH3DGWa/52gMXEAiEA7Y2TiCqrgkqq9K5Ecm2KNzaa0XSC9fNtwn40p5C1fPg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310244,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbq7QzCRA9TVsSAnZWagAAruwQAJRJi5EnhbqRMBcmPMDk\nFLkyXD1a6+PnJu4xMnVjI8M+nLz4OVB0eAY4+BTq3XprG+D6TYfuiZFh2bo5\n0ua0HC7Ir1cPKBBU6wG+NIqvpa1prBZHkQQKf9wI+uwIJuOFcHcDP137D+Cb\nBkwhH4wvh5aDaycALzY0pPNWAUEwFnAgw8cxQi5wOP6EF/WeUn0K4cQ1QtGy\nhH6bg1si72Ztr0LNqFjoYp7FVAuRZxBdmghK20/FWkfMZwMSyd0s6GTML68l\njo6kFvW61C9bJtryF3YrdRdvymaLNNnI+Gg050SVa36IKV7cU24B2gbJHSDa\naCFYj0EFSTVJmlzeqKZN/ykDMhoW1wuO1N/ZWTNQV/HxvygYY7fDCX18JA8v\nqzcmPSCKFqbTFDTOz7kq0wc8/T3cVbHnoAXsDdmDdni0eo0Rvbh85I2auPRj\n2PaPX4Wvb4kPkURKW49Hajrag4D2/RravUv5aDD6J82C3RSlxs5vR2cPL4N4\nsyT0Qv9frpofCgEOfMPco3p0MiHDnx52aFS5xldy0o1n6+KaVjE+U2Eq+dpG\nhwtoX/f0yoNob/6h0Ze4O/kfDpp9FLUaoOASXGLgDR4z/Uev/0JfJXiuE2Ox\nSnfsdqmtWRqi3rXkz9qWR94erzLHl59GUMD4Tu4jjaw2qV9zhKKZAiAfQ4f2\nMYdF\r\n=xyTA\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.11.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.e326bceb","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.e326bceb","@brandingbrand/react-native-leanplum":"^0.1.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.e326bceb_1537979442405_0.5599329717573849","host":"s3://npm-registry-packages"}},"0.2.0-alpha.8e9e5f73":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.8e9e5f73","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.8e9e5f73","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"d3bd96ea3a970797bd38874aa1b72614c1b896e8","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.8e9e5f73.tgz","fileCount":156,"integrity":"sha512-SzUtDjOzkjRNM9EbupgmNARPn95re/mCYtS8nbLAZw7sEjKNmUAMfhXLOaRvc+czBLBWFoQFVxIJX5Aydx26qg==","signatures":[{"sig":"MEUCIGBLUXVLJSVj6EOSNS8gY9ZBT6HAovxj+ar43D8BrhAmAiEA9kL+EQ+RQcfRoYUSH0v5QNZUQQfqwCnDcm1xEGDrjnc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310178,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbq9/tCRA9TVsSAnZWagAAbOEP/2zJeabcuW5OQRYSlXhX\nE2J/EEScoi3mAxkNFi7cTTBlLU0+v1zczNVaLqqZBlVT+gIZa5j3h/KWiW2l\nfPt8AWt1dh7DQQYjG3uYqeubpSERIZggGN8zMmzHEkt48b7I1P0+/WLK73TM\n2AtsPVWuTNO/0k9Gsiu9hQAcJ4i/Ti2BgiqaYCaNv34GgKDFu2G44l+gb0kE\nZdrg4JT6Q0nwhacqM2pOj2xTZS1YWvgE8AfHmv8jWYOwnTb44/gO0iaxP03F\nvfZHc9sJIK80262ZFk2br58YM6EFHgOpUELGlSCkzigC1dvVt+Vx4tloyS7e\nUKSSDbbrlDEkNiNTIiBXBw4WnjrcLvlVaat9j3Y0jb4ojL/kYC2Nq7393g+R\nTcbj2ZeyLfiZEGTGIMb9gZc2709mXgoqwamteEBWjU8QdOg2sc6tFvzhxTc9\nZMKaHB9MteEFGhsaNkhgW9s9C25Qsjyj2dD4MBU1zmlbVK17H3LslzlsFG6K\nsbdJy3mWfojKJQpjzTtgsAoxDIs6HdIeUDOzXpzOTtdynQTILQ+AWEZXXyk+\n3UvY/sJ0CUCKOCDbXMNNjPANLaFwtSE1I3rP/Dq/vznPSqpXdjDdVwacAimo\n4KAeQue6P0m6AXmAFh2wGLv9l02B+MBom206qnqctZqcfyjwXZvlVMloxdOo\n3Exm\r\n=CC7f\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.11.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.8e9e5f73","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.8e9e5f73","@brandingbrand/react-native-leanplum":"^0.1.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.8e9e5f73_1537990636934_0.15280855646256009","host":"s3://npm-registry-packages"}},"0.2.0-alpha.b5f6b79d":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.b5f6b79d","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.b5f6b79d","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markdekinbb","email":"mark.dekin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"priyamangalbb","email":"priya.mangal@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"82db2c23a54a85ce7c318f58aaa9871f84de3ee1","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.b5f6b79d.tgz","fileCount":156,"integrity":"sha512-rih/o7qi79OKi6XdWVXMdQrBp6jNTGmD/p2AASi9Nwm51On/2y8OqWo417WidW/8lucPf79n9llZovyNzG5YqQ==","signatures":[{"sig":"MEUCIQDLOxDTRM2BGW6rLBOODuFR2mDS0zAnXp+2/msBKOisqgIgW4Ca6ERPX+ug36kz8bLqgd4AdMlRaKHXbKj5OHSRzZ0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310308,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbrTD9CRA9TVsSAnZWagAAxOcQAIAAtNgwBKe6rR945oHB\nQ0e098POSV+U0xDzRWj0puOmlOinwC0wuCxMyBzbHwwuYu8HTzYCPzEkVVzl\n4gmcXe/sYMKo7517bsimjDDoQbfuyUOToQZI66tVDu3bEXjnc4zvJUmUg0ul\nv0LkfMFtg6aZvrUF1z/PqIe0oIHEuVhwzzudWa441ZfUQGkLCLi7CCuu5Nb+\n3JykS/M0povaVAt01vB/bx/yYVf26ju9FpM+G42RHhi/+oUle3hlcuq4HoaN\nVdSWTnqLNd0yzsopmWgJdGwP57P/YiwgL44xtgQ5WkTuRRS8OkATSFZ1bf1D\nffsGv80apGuxZKR+/0Uju7BeGKzQEEYH2xZK11CTGSx9BQ18i9L2ANmnvQGJ\nNRDR2gmJzqySetpKgbTj7bc0PCiKTEhOqjHPG5+fBaTsf0IRpkhwHnpevQBg\nXPnP5bUb3t99Ei++uKSCO5R3NW0b/NqQqaJ0hAAuTAlolQjRDAz/5s3bntH6\n4jCh+lTHsOOdNm2w6G3GL8W5mrLUP6xwaRZFBYyPNOf22VcOSbqETu/CkTRV\nfyyIGEUDsx9p/ndN71/NCvUha1AG0kZP4RB7qL6w9tgla9eeM2jf+0tbPKtB\n0mYrJqGKaRR+vRV40i+UGqDWCfOTOIixkHbu5G7p+/xfVTPz+n9fxAvK1Nd5\nOgbj\r\n=CG3z\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.11.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.b5f6b79d","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.b5f6b79d","@brandingbrand/react-native-leanplum":"^0.1.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.b5f6b79d_1538076924583_0.9084797030241458","host":"s3://npm-registry-packages"}},"0.2.0-alpha.9426f892":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.9426f892","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.9426f892","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"a6abfb7cc2757d82a3b003d221ebb76b5409c272","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.9426f892.tgz","fileCount":156,"integrity":"sha512-1o1U8gQzqDqP3FnN6skT4JHca/s1krucGidNNhabzmXnkeSq+/hyCvqP51HD2qJdn5tTUsoPZvkR44jzYW+Igg==","signatures":[{"sig":"MEUCIQCV4ZelUSu5+1us+P2tYoh0uIHk+rpbVYdosi0J871QggIgVK2cV0dnDUZkScFgOY3mERfQSwaLCVonjv13zB8u2I0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310532,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbsnlTCRA9TVsSAnZWagAAJg0P/ieTV6J2ykchcG70Hs46\nnUxIbteJBD5obuM+aPPQU9RDJ44eUduFAmktRiVDxnjSpP9Wb/aVK1bIWe4r\n3KnBvoYm7D9EU+2+vtN14Ny0tKUR2aUSPE7A2ROGipBUM0eGCJRYKet/6x03\nJ4mkOSXGXUa3VaB9+sCDVIJvHaQmY6oLvWJkJqVo9qxSj3Vc8fupNkzFqRwh\nco7+onW5vOD3gvcXgQoh1spuq+NW/9aMOyjwjR8unHl/L8O7dDaUq/v3ZVkr\nBnL66EY0IPxPg4oi2TG4vdZBtedsU0kusHMgFIpv5LoPSKBVNiVxInaYwWKi\nuO3iA1tSC9Ko68CKytmAjn9V4kXj/oTYNTMF5EE+68qJ022AUOoPFbofQ8z9\n/Ka4xvZ8b8TLuMgplUdmrhu6MCL8058sqdW/kUdNwI1cK4lyuEbEaimO/cUB\ntgEJr+9t18Pv2UYMyuohRw3O0HDRsp6wTh4swE3hxMYn+Osqu5KPxRPtz9SG\nDP1U3lx2eFWRTUxXlGYkK08Yzd+S+p2uN3FrKfi8jeRl0muS268IU+LSDF6j\n4K7C8bYcC9+HQ0YPpcs4nJ5OswFg24nU5AfWT66sHi3De/aPB6nOiHeEh7Ot\nFV5Mv/c5qW/7vHkDC5Seub9C2l3PoAuAaKk+uhLb67SS2EvZB4B3ZjmNaAKF\nXuHo\r\n=uRlz\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.11.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.9426f892","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.9426f892","@brandingbrand/react-native-leanplum":"^0.1.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.9426f892_1538423122513_0.20691760439064","host":"s3://npm-registry-packages"}},"0.2.0-alpha.adccb560":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.adccb560","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.adccb560","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"14c8ac2095a6c91e8f379f5a8866ef104910f582","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.adccb560.tgz","fileCount":156,"integrity":"sha512-/rtCq0QovIAb42v2UjfkXxHBSwjXwJ0DDVyL6iQrLNwk1hB5nBiPFAQOGMi3L9x5HypZChhbh6C1IHyFlzNxWw==","signatures":[{"sig":"MEYCIQCh1cnUiXrt3k4klIRNQ2JP1qG6fwlNajxRaFBhNx7jVwIhAOVw7SC6gLzl3/NAsTnHmwxzSJXNcGqhdh8rzJg3kQ74","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310178,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbspkOCRA9TVsSAnZWagAA2i4P/R4D2gq4t8rshgC+BcvN\nYpzT2UDw3SbFf6D6+bjkrnS1eSkME24yggjTFBrvffTt9inAafyk/KDPba6i\nShLUbGlDU7qTd/6TGdqvZEHh+pGut5CXAqh5cbEPjg4+qGOCnc0437uIuIsf\nVkW32/YYeZl0QKglKpdk504WqZVwUKBA9JHVE7e7dxJb41xp3q2PWwWGXvDJ\n2oAduG0Pm04Gc7XLxLudsXJFlKLrpPCViC1eaobBMf7PjVn/rneh0DIdFqJY\n951IQ9Rut+kV+T8IWH7jiDZBnzOp50IWG8KGrqickijz2X83+j+1qNpamvYj\nugIW6bx77Ujz+jZrifWvBRKGfRrg9kjrMP3fJtlyL1dvzQdxBIj8eZUZjLnu\njVbVeLqwYO+0Z9XmrOrBFtcr1n/kiCIh1rA2J/VRWBIH/SEWfJYXWQ0pRCbT\nE2JE99IbpgTeJTnBK6le6M01xtoEu6qIbXBN6fxUj5SEK90M7Yp9bjaHDyYt\naQEwjEI3nmqrnseB4XcPa9ozhW0JHwP/7r04wFolWhHMLsyF7m7BrD3h5Qfm\nGGKYVLCE6qy809qjdEg1zsOs+Yweo4ZLjbxJiMMHsjrRILOFOFcsOioIN1xo\nMSlgbhklMTl/EOAO0/nq0z1V6R4tMx4Gjtc082veHYOHIH0SrRil/FeWKFi5\nWpxN\r\n=ABx0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.11.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.adccb560","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.adccb560","@brandingbrand/react-native-leanplum":"^0.1.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.adccb560_1538431245106_0.36895259710309514","host":"s3://npm-registry-packages"}},"0.2.0-alpha.c754ad35":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.c754ad35","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.c754ad35","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"7ba568ebc9e24cf46fd03c4c765dbf94bda09212","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.c754ad35.tgz","fileCount":156,"integrity":"sha512-Mc+FL7EojfTTBfTjORiAbdvdnsyEwQyk/Yri3xtcN8hH/vIJi0/GraOj3IMK4oDlTjooP4L1PXhPfG18HWHGPA==","signatures":[{"sig":"MEUCIEgafeDC/OIn85ri/hbYR2mVR/DFCp+NcNv55m0EfoQsAiEAgji5fQLHzL0j0BpQVT49HceDsPtVPZntGyk5Ix+cwzM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310178,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbtQ7OCRA9TVsSAnZWagAAPHkP/jD7UkxjhTyRpUWokNBT\nfgD94PW05YVSZ7p/2LG8Ma+uut0xiz2EOeKAf0bslTvJyFw4LN6UwRvvyibg\nmRbh96+pnL2Km5QV857NmV3+W7t0uXGHY8GBba+rfNopuOlNyGk/NDY0vz+Q\nPh2ZLnGZX+Fvole4u3nYSJZgP3Zvu+KGBEFmwM7dCL5IuuN1UHmdUhI57Pld\n0Bs2mgUFs/289zb6MBTvTR3ECCPQ5YHmRv/+dcryc9zw8KOx28FiSf32yTgb\n3neTjg2mHdVURmyyiI71WWRlNVlZGrWTrorhWtEiR52aRpkzt57pbfP9cJGL\nW0KVSsu6gFoLV/tP6S1zeUzFj60/N75duPziHrxSravbOXbeSgFuXY2soUVJ\nk73jj3E22D3IECKG3m1ZeDFGK7lT6UuBwRgahUsTN/1Jn6Z+14KP9fdSmEVb\nD37TOtwPhCylF0VHtK8903AneO1Ek0/5VAl3I61xAOOHddjitq94dynTBFG0\nEXpRm7iFGYglf1tGVcwJxxdBCwnCa25KQmzoUQEi3v+G08v0LQKBBEzbvs7g\nLEUwFJEOQrymm/0okZMKd8kjgQUyiJspBOwWDblhYFJZELhEB4zGeOYscFrO\nnaOyD4EIxco8yfrFFFSG+cvC3qlEV5K44An3YhM9yZ2mIZKduyz8tRhZwg/P\nbHr2\r\n=divU\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.11.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.c754ad35","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.c754ad35","@brandingbrand/react-native-leanplum":"^0.1.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.c754ad35_1538592461365_0.29260360768107385","host":"s3://npm-registry-packages"}},"0.2.0-alpha.c7903ac2":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.c7903ac2","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.c7903ac2","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"026e8cffbe00164e7557424df64e52c81855f4db","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.c7903ac2.tgz","fileCount":156,"integrity":"sha512-m8YfALi/iN0V6s6uk4tI3+TdgO+LdewttvygMQ6dxB88h1Ej9lYYV6N1WFgh35hgOPcnBjQkVfIH8zLDDt57SA==","signatures":[{"sig":"MEUCIQDXtuQF+YFfT0v9zqQzYjs+gxes4psVP/9qYcKf8BnczwIgT4KpgdvV9LqurTDbIceuv2qRDAvuWRm9qzGC+frg+sk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310178,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbtol1CRA9TVsSAnZWagAAlL8P/jLYa7A+CUk3R1MQ7TwL\ndoPvBQQIzxTVBexHR87WB1SGpUZHYzykL75an1yw+eXE6Z9nGCVU6TgJT/Cl\nnpT1q+HT3FMZbgrsXDAD9kVwW3l1hRIWLQExhsfwLk5TcC8XaHbJt339LcRj\ndU/ALGWDwpWLzrUFSuvb2tlBay3kIZ7q+IBChyss9F0w6B4F3TkHdDK1E8Wk\nyRuFcL8ulOtYGgAEKNHiQxgkOfg4MIQXoCURlEgtMDvvdjiZX5CcETZUyI+6\nina9d9qy5jWseXKf2eWdBIzAH5PacJ3iz5colIDr8Qa6o+3XdKPNi/mU6ZF4\nyXVNZWqRLxTIO42070eVYccMZgzQ0zpL61PgN20pYVKEf8b/qOIqZdG7XXck\nHYjwvtSu+79sVW44sv3l2hn9Rfxvhv0ynRBzetxf5iNxcmKrC8BXvuRI71sr\nmJTLnod/M1Gw1lqGPZx5CmM0D0VTD4ToRtbkk4wxfqDh+hx8KW8l9ero33sA\nBjDWwjyOuOUAdBymgvy46ef6c6iF8fNgJe1YPgXACPNVuD2Giqa3n+trvO4F\n/iJXsZQx/ri2F5YiuA2aDH6Vkc73B/Yb2vgz45volYa27vmwvs3BFlQAaUEu\nffjdG0nZ8eSL0D4JkMRGOCdJ1BCqSMq6vtF+Uki2mKZCUqBLl+HScNR7jNYL\nhZgT\r\n=Xyiv\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.11.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.c7903ac2","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.c7903ac2","@brandingbrand/react-native-leanplum":"^0.1.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.c7903ac2_1538689396513_0.12087111971222719","host":"s3://npm-registry-packages"}},"0.2.0-alpha.a96082b3":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.a96082b3","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.a96082b3","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"b90c2c1dde9361e0515a333b6a33976d95bfa98a","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.a96082b3.tgz","fileCount":156,"integrity":"sha512-sS3WcWvIukY0IFl1gnzjAS9Edm4NfWuSsu0UX0muOkjzCx/8LYDN4nPOmvli//L9WFzbMyQ7RtVmop0A81vEyg==","signatures":[{"sig":"MEUCIQCl+K5HDR9LkDy0pZfRGHWGzwlf2PWzDPAzO/ylqEb8zQIgGWKEW3oMhf/VEI9rByxUTB8//1+SLAZj09fbe2Ao04U=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310178,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbtpKlCRA9TVsSAnZWagAA1LMP/jguydpMooeF9aEcEEVY\n+CQFUInKgrEmZO14dbRYPxler0AcZ75QGTNt8ginhX8uZR8L+wp+Xt72gXhn\nax5Bs9m94VFlOjwbQmD0EpnogudRvpU2jueIlbmkGE2Xowrg7ydqTsZP4Wd6\n/1/N8d4Pd8RI8XmPF4saH2sucjKGXRjiXMlrLsZpiB9kezYFghW6Al7Ya7cR\noldj8lDtH5osmevB+EpvrU69HIM58TM6HUElekIlWKf+hDY2SE9d8iKctyGk\n1d0wwQ+TLuCdeDSlH7uE4L1OczZgAu2evpwfhPIazz4b10TTDRH2JE0UoRm5\nVg4WTu/F3hWxjdi4RerjFIl0+TJW28zIFXgKOAuL3Ru6bhXCpybXzUHSxNQq\nHa9YYStqr/joctVo28ScePfzvAv6Q4qSOGgRngwLcoDuQRWSdIl8/Gsn9dJY\n052lorS99kbsdIHEeHuYAwgHM+mzeH5ICIA5t2oPfD+wW7beuNY6UJavbZS7\nG7evh4y/MV//82+mgjagzOLIPz1Iby6mE8KZo2hzCCkc/5lxNY6vfu09JOoi\nRQayqL1VbUa7xsdXJxzXObr26JvyEZJHYwHcTRAA3hldl6c4OPCirV5rk3T6\nGtoRTBOD/r6Oy055zcV6HE8R7M5/o3Dw/Vx1DCtw3CZzO7KkLrWYM7IkFaOR\nOzeU\r\n=F1m0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.11.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.a96082b3","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.a96082b3","@brandingbrand/react-native-leanplum":"^0.1.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.a96082b3_1538691748350_0.2255656648637896","host":"s3://npm-registry-packages"}},"0.2.0-alpha.68357379":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.68357379","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.68357379","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"b54bcb65a1b8145dd1b8cb0269b90c8dda431b34","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.68357379.tgz","fileCount":156,"integrity":"sha512-paDrwi6wkANFnfnHT8n7w906k0+4qxx5Ry49UKunPGRDW753jA9E51wy95ZYwtwj4JJFgCxogW7mOl/S9fkKyQ==","signatures":[{"sig":"MEUCIFaDJKR+eKzyQjOHlXfhyIjNVysQSbAq2nxGTVyc1av7AiEA7F8zXvW5WNxdA3EcFFQmTqiSILjDGrIlPinCPef6UZE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310178,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbtpwnCRA9TVsSAnZWagAAIkUP/3J+iONLAh1CKY3UzwNK\nwk14pTN7+wzT8ZajAC+hHndCho+Vol06ku2mDb6m2qFgYbmiL/Q2hlhfz5Aw\no3P4MShJwzKDZguoW9a9A5lV9UvObLUt0xNKN8ZlMah5EPYeXniAotbsZx8J\nMTI7lsXiEhVdK3b30s+NDOuEplShpHYK3WrKeHaeHiKc1IOYviIDSog3RMZP\nZVbS9eGAIknfmpMzx9SjE39GNW1TCcbWnGxH/YK2eCDv0vlNI8Yo9C+SX2OC\nZDB4E66uwnaDpd5XS7V8HfBm3CPiqkC/lr3cqwPFpn8mlhmvZ48tI7IizCOW\nMIDfWvB91ymZGIn+cKHNCniHmFCvz1PZ5/WvSUHg0xR/KZE3HNEriZy3mjRu\nI27mEKFZgQ3t8L2aRz1XVwSP5zR6zrmKwgxRB258nzTllPc6BdyrwIwFGelr\nNhHuiaIP1tmlzQpyPKZH5tWf/gk72yIUjSU7vETZ4FyuzyPfrckkoMZ65DFQ\nfMlHXEOYe0lFGHL6PCxEqFJvaD7AUv+5DQlFxm1hRWquU031y1wh/F0tb+4h\ngjtWPkB4GBG0tJT2ckhcCg1Dj0/BhNGvYbk5EP/P7LKEa4Dveiuz/kPmZrNV\nCkEJbeSvNV23RyGRG/nLiMzs0OWBVoCuwml+bvx6SwJ2Su7o5gpZDc+np3LK\nmry2\r\n=H9Sv\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.11.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.68357379","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.68357379","@brandingbrand/react-native-leanplum":"^0.1.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.68357379_1538694181986_0.41712651936800604","host":"s3://npm-registry-packages"}},"0.2.0-alpha.27bb3bd8":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.27bb3bd8","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.27bb3bd8","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"0c31d947125e48d3b9b5e338868244d33017791c","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.27bb3bd8.tgz","fileCount":156,"integrity":"sha512-BPgTT8HJhvpSRzgaUpFVBq12N1iBbYHGmCd+DyNFTXIDALIdJSzUaaXLZZymEqmUcCyyy4OnN/BFVGog0a/HFw==","signatures":[{"sig":"MEUCICkKAlj+6YDymEXTQ3R3OOckI5o/Q5PbHYEpYjml3CXaAiEAtmJl54of6Hq8Sv5w5Q+/sQ2k7YbtBsPnrgy8SYSu0u8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310178},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.11.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.27bb3bd8","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.27bb3bd8","@brandingbrand/react-native-leanplum":"^0.1.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.27bb3bd8_1538698085606_0.4781806197498162","host":"s3://npm-registry-packages"}},"0.2.0-alpha.414d45f2":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.414d45f2","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.414d45f2","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"bf1d054b1ff0ea75d44526e89fb6377dbdda96d3","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.414d45f2.tgz","fileCount":156,"integrity":"sha512-obTG6Ty1v4kyVOz1Jl38S2O3QmXoTCj+HGQXqq3n8Xb0KX/RjV2GxCBo4rXLJiGKbCK/fCZbxfZNgclNVGDS9Q==","signatures":[{"sig":"MEUCIEEFfzFnzwJk2vD5RapcF6tanbNZ8dVlINQ0LcY5VkNUAiEA9R55hQObZMaB5pLGPYZ1e0u28BJXZXSy8arID6m3B0Q=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310178,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbtrACCRA9TVsSAnZWagAATfAQAJLGcBY+nLxmIgj2Uv0A\nQ+hkaRGR/PlxVAzboMlN24EioNmSfM3tm/WYhM3cfmaY4XvfFG7QlrK6YVQb\nCqprKyNhDVvkvb1CCqtcmJ82VnlNmM3EvIqWqYjzLm2B+pBRp/kKzc2ER9i7\nTcVFCsYbnw2pQSBTJEHKW0yqZSJu3OvR5ZhwF4I9f7MgDauJkgTierzEZFQJ\nhvXcqqPYhQAENKhVwikOADyNd7zHJ2Wg7daH5hPmRhVTP3l8e4V2epteHznP\nphzvaxpmpsqfZb+PpqL1PnStX+TSU3Yp/CaTMl8nJAbM2RUiwVpej8GIzAih\n8oweZSBpqhTMZnuH+thkYFaiqxH1Grzw12BdFNo+7XJ44PLUFxHxKSKNmHH8\nYRi30Ua0E4We7jfyTvyXsBBDLvj1k1oMjwQK4/Lsbk/UqeDY/se5yi24MLeg\no5Y71Iw4o9+FCGaWlr5rKDOZmCrN8kxDaD7zSqrfmynv/5VWQZKZKeSP2/i/\n9mJOg1ls6G+72KEkETL6MV+PrrjL/ZtQzIMsUkB8O5dJTZgru3tdIdNPCcTx\nOo8HCfcv65VO/34b4lvk4xMGAR+uVnz5UI2ooPampoHUsblHeWP2mLh/RpZW\nIhgCGW880CJjypdPSohTgx8n2vB7rVaf/oYAtrLYXTPff2UH6clePcSmjVzo\nCkf3\r\n=EwZw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.11.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.414d45f2","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.414d45f2","@brandingbrand/react-native-leanplum":"^0.1.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.414d45f2_1538699265320_0.37888968351172725","host":"s3://npm-registry-packages"}},"0.2.0-alpha.95dd219d":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.95dd219d","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.95dd219d","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"e58eeff9d1008a5e2a7f4572351f08cfcb9b4c81","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.95dd219d.tgz","fileCount":156,"integrity":"sha512-iDt773h09KELKj6gEnULQdOrNEji/QuDh0I/S4YZWKF6IsowqYEhNoFZpZIhWP4tQnHmG2pY3wuKjG6Ilj/udA==","signatures":[{"sig":"MEQCIDbfQ79htQj9iZNOj8r97GAnVElXG+GJQp9u0KDtuV03AiA05iF9K2xYi1slq4m2ZPUMVR+1CQUAqTXTQ0ekQCm2NQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310178,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbtrqwCRA9TVsSAnZWagAAgGsP/0S1h9HlHc+7cpTmdszE\n6WB3b5QYotX71aoVO/wzZj5VueF7czDddKbXAR8btw9jgdSPwmVprMQEUuZW\n5ppvM0MsbV63T0RflHqJ1g2arhNL8OZthwUWzurz/WIsLJc0gDP6Az4j3Oze\nif/5HVOJNfczD50Pv2BIi1NpWPWLRDONxB7sU7vEtRvZu0Nhr1m4q1ajrFrS\n4KbJK1NfXyldstpFqrGbttv8ErG1+bvMfxJu9pzXf1HWC8JlEf0GmRdtT0R/\nmXphabov4prIBoSTLMF9gi656J1UlwGugchw36GJ66l3UePMcythdBVjblKI\n7Lnzulgy4BHQCCIFXCWkuISJZkUv5MkB318TJWPIaAAiF1pbQDw40NSKFQoy\nwed7cWxDcjMj56vAKjT63XOrM36AsQjTisM1ejin73xLsUp/bAj7GR++GyJ7\nuFewFXl/zdKsFa2RA2SFx1dmFhKKRsSnSM0OzBEjdhRmaWK3rtkHUM2ruvzB\nY6Xnh6vbJcD82Eyy1iBcAwSVdDT5crLuupXq2p/5dtNzlbwdtfxW0CzXflLR\nDWocMj2AJoRqqFSmC8t4D/NABPzFeNBrkfEBdb2mpsxkCXK0Z1rDF/Pb2HyO\n9QowgcTKPYsjkHYGiss8E7Iy3+btHEqZofz0Wyfd0wj5uH+lJxNKZBn5DmG6\ntz4g\r\n=AgeV\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.11.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.95dd219d","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.95dd219d","@brandingbrand/react-native-leanplum":"^0.1.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.95dd219d_1538701999468_0.47139899885979664","host":"s3://npm-registry-packages"}},"0.2.0-alpha.74b8b7f4":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.74b8b7f4","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.74b8b7f4","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"28fede42d4cff32f0e9225ee7ae4245a7f14cd9b","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.74b8b7f4.tgz","fileCount":156,"integrity":"sha512-bGyq4D085bK3V37jZ8Pv0JB66QHNBrdZZiesmt6MEFKK9SeWWjFL7U/QRoOmPE9IQMN2l3gu3f2cNntbvQp3vA==","signatures":[{"sig":"MEYCIQCLOtoX3skxYvYiSGOEXZ3NgAPAXFGuukw35HpUApzkmQIhANEB7BZ7e6FDATBqHQbMLGJ1BrJBbRwArB2H6DBKBcQo","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310365,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbtsq0CRA9TVsSAnZWagAAg8QP/3VuP9IfVqcPZN7NYifI\n7JPtNnuUWIRVYqeELNMEu7ZYl4yQZYg+QvilzWv3HkRLmZuNqL76cdqhAK7S\nkttFNkYHob4vEo8qRgTjgOe9ZHWf5WGjQYspczqXAY+0QZgQMZYS0idryMIq\nKYKsh48Zn5cE7gld5nZuKegXiAYSCuB59I8juVMZ/UBT/5uOt3Uc1Vgl85Z1\n8nCMy6QrwlhgoQ3VG9Oi6XFZYVJnfeQZrwnpXpHusAS590VB0qDFbBE9/w9Y\neC34snrNlHW/dqJqIKYySeINnL64kXzh939+QONx9xDGjit150HBia94pLSI\nGvdr6DVcf21vk/05JcqAMLDTHtlf2TDBBoYu07n1+HbnWFWoCNJpA8cDZ28y\ntB2hJVknOk7pWTW1Go49EnS6J3CZUoRxzROLUeKSdd3e2JRtyAOjEprSRYBc\n3Zk3pOnvPiIOl3pE51x83NtmExrV6jWt3D+9ZrrpdQ1FUwWYak9OWq7NaMSC\nvZ3Gv7Tte+a8uXI+Be3JyMXnH8fmyRR8v98ykUDv1aMVsaKosurluXupyVug\nxGOPsYLH2elRY2lIGO+lhzmt67KzpwdZRsx+dQO2UWRy8aUcrW6BVdrE1jJM\nrR9lDjrJEFvR9TYgarOfCwwhW04VdaKbrry04T4Zw7Je3gpxdvlPHOLwbZ3E\nhOIn\r\n=Xj7P\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.11.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.74b8b7f4","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.74b8b7f4","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.74b8b7f4_1538706099735_0.4495607951446807","host":"s3://npm-registry-packages"}},"0.2.0-alpha.03d713be":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.03d713be","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.03d713be","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"773044992801eb0b77e523f3c8e2d11d028fd232","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.03d713be.tgz","fileCount":156,"integrity":"sha512-lgOm2piv/UlcY92Z8xVh84PM23E1nIhIVB/VCCra7dD+0qXf8Q/nGHwdbaU8O+u6oesPQ2qJW16zzDjLOr/hRA==","signatures":[{"sig":"MEUCICxQsUt6JHPYo7lcYn0WfRZxfwVhaixYAfnnxbshQgNiAiEAndsCJq4iVBlAGzzRr9ZYCqOBnbCTyp8UKMePDV+iArU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310365,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbttLMCRA9TVsSAnZWagAAF/oP/0QVT6ArNWp0pFU0MxPG\nVNqSwufMzTCqbpdoOm1pl59krX0ED0HjRD00Y4ha45MkOLzSYZbDV1utFjUb\ngx9LaqCystBUdnYLjVj0Z1bIvIE1MoZv6Ohw7EktmUcfu38yiofcV/p+6OTe\n96STD3YCj9MgNfsNvKc2ndc+Zdm/x/uyI0nmRFH87C8CmCacdODGftGnrIQ/\n0lqmYK+XsbtmlgFRHyDbk32stX9yoTpwBDl5SSnUttZJRAne4qrM/yqFXrOl\n3DUYte9IspiySkLdFkbyAgHAaakkSKD9PEv+Y2D36k3x9UGN5t4PCJf4P5Qi\nusBG2KZoPu/0I7M2oE3FWUpGyodpJ+iCO3LTq2i6jAP4KhGYm2Qdrr1ND3Zr\nolOAmjh4asN3HrlOVkuSZ9aEbPIpf1PTjhRP85SzqE19eviTmTZNZ3HiSR7Y\nyMaGD2eekNbSHScXF+ijj4oNvZ7vnyGvK/pRU6l8I+MQIyP+16LAqm1wAxws\nXO9CT8pL/L+NQVTqIyfh+C+Q9RUJ1vx7yXN2nrye06OQpApojjmI8LMLxyJg\nmohbml0SBgX8ki5xSLTdwhtmsIPI/2LEIK5lDyxiK5Ht+uG4dxra/7hWSIvw\nvivViaoCkRiysbP+HMxQlos4YSB8Yl/57bn2gIzJdgXzlIP1faqqhgxy6f7S\n+aW9\r\n=oB6k\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.11.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.03d713be","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.03d713be","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.03d713be_1538708171170_0.1653612696600899","host":"s3://npm-registry-packages"}},"0.2.0-alpha.74e71f8c":{"name":"@brandingbrand/fsengage","version":"0.2.0-alpha.74e71f8c","license":"MIT","_id":"@brandingbrand/fsengage@0.2.0-alpha.74e71f8c","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"fe35f0b786873ab821a8a61d3ee89205f8d06b48","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-0.2.0-alpha.74e71f8c.tgz","fileCount":156,"integrity":"sha512-JhkI7xuEo0o4gCQtQuSbNDcK66m99WNjhOh7jDTWUwVzPQNZ/mjPITRvBZEniVAJFz8PCYCIsC3821GS18Vr2g==","signatures":[{"sig":"MEQCIB6zoy+rM989GTefg9pc1F91lwjWgYFqJfWAG35TaldhAiAUY/JynsZwpUGd5QedxdgQuqiIvuQgLg9WmkzHK1AkGA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":310365,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbt37xCRA9TVsSAnZWagAA8BsP/RHREVyloYrl29dg2UBm\nXMy1HZB/PscxrC2eAXh5EtjEguGiCBilRYbj1DGiCyVb3uYTXka9paxiY5qF\ng5avM5B9Vug8f0fKCfgyLL4UeAYIeGTJcPNRHJFewCJkFSzcUyIlg3FU4bg0\n6Rx14TPKBobdTo9g16VBSIS7dQJNFiAFO10q6djM2+kGvHCIZqKRx/xeNA+H\naSphX0L2lxqdtwrRJUAmmQjdqRio++o3QA3sd8+zb582VSvUISOjsUb0Ls9N\nIttSvHeZBOCpaijeA42UX6RBP/Pg2bEs/sLgNlIpjcSBoCukR6hzR1MAZosa\nmsLlKEMt9pUEQKqDWjYBNBZMkn1FVqDDc7RDcaLwW2LUm4BQ8oy7PVElBob2\nDGAG3nGzUUH66ZWvusC1k/5i884VcqIsesuNgddCh9bn5T0evtZ2b6N9VLkT\nekacdK+ypBPBM6oz94lnDpcdnoavTKlxZ6UDLLEXZUXcrcBtW9KsMGIyrIUM\nCxqGife/x96GQyX3dulB914Oz8Gq/9ggf7sBaauNqF3uFutjGQBk65kruDgz\nMLsVkdG4V7ntcNeOK5CAnoPpbZ1mAf/QetahHos+u9lyzQ9J2k5IMmB6h7L6\ne5+N930iaT4Gm07se24PbQavhtN0AntielRh4J9WnLgS1ZfXGg/8Tk5Fctu2\nDa29\r\n=cpXh\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.11.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"0.2.0-alpha.74e71f8c","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"0.2.0-alpha.74e71f8c","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_0.2.0-alpha.74e71f8c_1538752241150_0.5699205639105156","host":"s3://npm-registry-packages"}},"2.0.0":{"name":"@brandingbrand/fsengage","version":"2.0.0","license":"MIT","_id":"@brandingbrand/fsengage@2.0.0","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"49bbd761d712eae333c6c98e4cda1b4318b525fa","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-2.0.0.tgz","fileCount":157,"integrity":"sha512-aINdJIpomcJLK+ukGDmyykO+P85JaG2Xoq4UvJIdmIT82nlLGQkW31/VMoB70QwhA+cScmgmOYxhmFi36j4AQQ==","signatures":[{"sig":"MEUCIQC7XMcD4zTNDSGcfsf9/nsd/mhIHlKXc+9vr59mmLiRegIgJxuSe2AGGGJbBtnSlVd/eqwk85Cg+04mQDR3d4ux0Ks=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":312274,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbxiheCRA9TVsSAnZWagAANHkP/0AboN0PDoLdMaJZIe15\nRB8+sy3YQUuVoJDDd8OOLhPLpB0OUMYRhEl77jM1kAbeLYLEE7dEEvr6Xr6t\nnhleVEHCYJ3S5oL3Rp4fynXq9Y+Mt17LfiviJ7sLSV7FoqyZf0Cs+2kvjxHv\nN3EfwsxJthoIUp3j/SM7ZxKn4eBWk/Izq6BOd532GZ0vKzja5+g7pB1nqNh9\n0UTtSsCu52uXy1YmsQCuxaB6woLXODKduZTlJ4GOHHhCx51WnJj1AFy9XZ2w\nYKmGOtzumNqoIbOaSLuQw5Z2/PBsjRkxETch3PXp7RLRoe/C5k8wOeKS6EV/\na3wkXDyf99WXV5vR8mf9HwUrqujW4CfsDulFaSiFSJ/iVHD5UEfbML5wdubd\n+/znpHTxyYRLYe69zAtGFnCgTRL//zg53Z21jtl7GDLuGE4ISHz619kYdemV\nrzh4SsjExKJ6c/JTVxn7/t1FabSVpOhWTv22S3HJLkP8RS1I4gs9y21w6GD9\nvDJlbdoGVe1WiZul1zKGUyj3A+YG/8tkrovqE6+vZuDy+6Iz4HXddCzwwMjz\nCt9BkL+HK+Bag5i8LWGUPrsF4DEs0AyQ/F9kV1fg/33oPozjWNaIdIq0Hm4M\nO+kvDqfSD7BfAMjuQpTlwvrLwZbfaPFeLg/gkxKmltp8wJClgAPWJCakZ9XF\n0IH9\r\n=xgom\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:brandingbrand-fsengage-2.0.0.tgz","types":"./dist/index.d.ts","gitHead":"2df9d15f9fc98378229fdcd8b64216cdb44a61dd","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},"_resolved":"","_integrity":"","_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.12.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"2.0.0","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"2.0.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_2.0.0_1539713116051_0.5413185284013662","host":"s3://npm-registry-packages"}},"2.0.1-alpha.7":{"name":"@brandingbrand/fsengage","version":"2.0.1-alpha.7","license":"MIT","_id":"@brandingbrand/fsengage@2.0.1-alpha.7","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"f5bba2f30e69b828f9eadb79920c4af8fb0e0349","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-2.0.1-alpha.7.tgz","fileCount":161,"integrity":"sha512-Eu2lzPekbLS3lQaUGrvAR6zcWivjkFxtCl2nck/7zhI3r4X4oAbXQlEVjDj16o75f4Jz9VH/WDxzWOyS2XdJZw==","signatures":[{"sig":"MEUCIQCwG0npDkpBtUXLMhTRzcWz7cK5sFHu8coOQd4KxpjmwQIgVCSjDDTa/mb3mCA3sMbzqI3PwCMNShtvYzHrWXw6rqE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":350603,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb3MxSCRA9TVsSAnZWagAADTIQAKPl7i3LPvU6MOsvh4jU\noxT4+GO+ZMnA17knzaVGVeImZHJC1V7iqkPnRU00rW10F89wBQwOQuFLu32S\nevGyjxzOZvfnLjpU9mAdbMDdDl1zHjSB5zGxCL/miRQ3qC7ldTFTdtMB7yv1\nUKlZ/Iz7IpoGkH9AR9nJorN95ZsVmzB+SgMBibISoMGJJdYwr6FrHJxQOyLT\nQJ5TzMxYedRacisBGfOgSqR/+iNZgY+p//AD5lJ4MbBTBmqwW/F4q13YXAdB\nFTmf3Mtt0cFtl7WFycm8BCkB2uaCsWnKORANty7C8FIqp454hCBun7bgKw3f\nLgKhZnn41sGph46N+87xnNC7ALKhRrBmx3pvWwuAFLYCft+8xego6zHlnGvJ\nPosrZ+6i+c5gPQ8mPFUAUE3r8r8IFyFXhPkKAamfqhH1dy8EhR9lCIBG9e8p\nJuGaHsitPhcZzcj3XBCmYNpNZ8cnoc3uq3JF1FvcNwp2ndJ7lmeo5cSn2dxf\nsk4h/Z5WZw8zZvl5tmV0oQxMqxji9IMGH+jkxQ+HNcGKESunPB4W5qYdC3be\n7NiM+EjhyBBLxFeeJeUITOHw1sYx2Ma+N1lObzDUNfbsZSO+73jsatLIlk3t\nn2HyvLD8aVzwbSPbujXRF533JgVCmP04LBMDkJxNmDBNnayGjfo7J1DieZLs\ntB+o\r\n=HQ4c\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:brandingbrand-fsengage-2.0.1-alpha.7.tgz","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"715d0ff0af113367f2329daf37f817d9448068e2","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_resolved":"","_integrity":"","_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.13.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"2.0.0","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"2.0.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_2.0.1-alpha.7_1541196881365_0.1726492954080019","host":"s3://npm-registry-packages"}},"2.0.1-alpha.9":{"name":"@brandingbrand/fsengage","version":"2.0.1-alpha.9","license":"MIT","_id":"@brandingbrand/fsengage@2.0.1-alpha.9","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"3d1ea4b4bae34558158cb568650dbd6e51ef5941","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-2.0.1-alpha.9.tgz","fileCount":161,"integrity":"sha512-nF76pmLPNUNTd15ufPiAkBg/ELBMx3Hlie/IW+ktn+qYtN5dpwXbCagr46qf37SRwaJJ2NnSI3t2wxKOtnC77Q==","signatures":[{"sig":"MEQCIH/g2wR+BZLW19S6LHyYYgG8FAjKFyv5uQPNRjg7mG3pAiB3T9lpsVsRy6vPfgwpCS/VAjtsTJe3QQXVJgGhtw4MjQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":350635,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb4czjCRA9TVsSAnZWagAAFawP/3twPhx/0gYsInCMIMh5\nPmkcK4tvIRDUgUOiUPeAUt1bPPF9uKJ8mRgo6cse5rBtMgICwZnWKptmosk8\nTt8aWlM1rR7TEsXpzO3C+XCWeFD8NO9VCKB0D6LUQhCIiF9dzeu4NKr/Yekx\nqm4GbyTfDon4OJWZpPGcLMzjrNjHm+GuRr8rjrwJimHIIMl1cV9PPsJZfvo4\n1KdL1Rt5jkD1fBsED9tuE9b4K1UeD4IhUwci8pU2WNLSk3OdmS8zJBtOSMtl\nM6e2DJl557qjI25Lq+aAVrUAVDDoWgcI3HzsiCzOFSBOf9k3DOwz4jYY7QlZ\nQDxhHbf1nxxMKavZ5zWB8N5j7GDuWqi69ETB5fM0cKkxkvYpMptsStRLESlg\nezSiFV7sNwvX2bqC5AHuxeJxHPxRcBX7ZgfZbQlO8kf5YcbPRMJ7jfBF+DVp\nnXhFVOmf29TsBaZ2a+tgJSXwgoHqvhVi2qKATDpOPiuQH6qPYh2emL5/+0Ud\nJSASjl1zlGPETAGOA4NplYA/lsnLy2KdPMpVSoXziQS0+ZU7C1ZmKTHXQ0ZI\nEqWqwhbajo34x9CJ4qYP5LE7OCPeeXKOmKpSo3wPb8CLLX0rkE1fHh0nnpZ2\nwjESHjlO1K79Yc+O9BoMjAerStG0LVBkg13sBfcapXClRLioYpGW5QCijSwR\n3ml2\r\n=ROHb\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:brandingbrand-fsengage-2.0.1-alpha.9.tgz","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"0f69a5b93c5e7a65a8903d06316d64f652663db4","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_resolved":"","_integrity":"","_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.13.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"2.0.1-alpha.9+0f69a5b","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"2.0.1-alpha.9+0f69a5b","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_2.0.1-alpha.9_1541524707024_0.09011290227496094","host":"s3://npm-registry-packages"}},"2.0.1-alpha.10":{"name":"@brandingbrand/fsengage","version":"2.0.1-alpha.10","license":"MIT","_id":"@brandingbrand/fsengage@2.0.1-alpha.10","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"a0905f1fe4209862ae497bd74154113ae6e05b6b","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-2.0.1-alpha.10.tgz","fileCount":161,"integrity":"sha512-f/dW2c4QebHe4BZFwBsfUFRkc1jcikbtnt/PqXqh8CiTcviiN0mVB2WhzXVqyCLKimDzWYDWldFCFWIuf9iDGA==","signatures":[{"sig":"MEYCIQCybR3j/qNHXrlxmerpvv3mj2C5heSma9tgqKp4SDQA8AIhAIwPLSsaeCRxkRPLHjfOQ7eCrSzjroZq/Eo3tBgkJskQ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":350638,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb42kmCRA9TVsSAnZWagAAGVIP/iGljPIw9lqxtn2t7ZFo\n0qzMa7Gc7jmxq10hzMpC6JZQG/ImscWCgLSigiaxEphr+YvqVXuJ1w9xbSBx\nRnUdvejUqKPQmG842ayh2gKq/zbLUl05mpNFRme2GjCZdmbz24HhA+yeme/D\nnfnMkvlb9I5i5CNwjuI6gloN5lSq9FkD+1F51dfGYUI/onSVmygUCT4ba5Wb\nPSrKgwnTYu9cK7DBdDsl7EgJ9339MgvrU/tJnRIlKjsl2QSVYa/4leT5krgC\nzl3uK/VEXm7osjvLrkFd7BZ8C2NmesGUvZaFjq6qURCykb8XjAxthuiVlv1V\nLwgzGl6323yBUGCzioDRmHKdkQKuj7N7lXs8wZTIewm9X5bcW7rKK5UNb3p8\nfOeKel94BfQfXJsN654ROuaX5piRYk8TkWCG3JKXfoGk0hgkw36d6SzOTjvi\neqaL7RW69bS8QWcMIzmN/Xtw0dExkTAklqjHz+w3k+wNJhoQUPSm2jkb04mY\nrXncFR68puu7XwIEGdpJmA+epUckesOUrj+84q9c9RACmbcGdgRao4/jAa/M\ngt9UoGjcfdCTVadoZ1HQtakfhKn+Au3QpIBeV73hZiyGOjjpDya7ZiAXMsE6\nEBnIBZGLzE5RvNAax3CHdv8QLlWm0KJ6qJKLIm/ZAwPcRDp449xEUbSRHzN1\nAxhK\r\n=b4rj\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:brandingbrand-fsengage-2.0.1-alpha.10.tgz","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"2e4a13cdda1b5d66608cf5aed84bb8473a361206","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_resolved":"","_integrity":"","_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.13.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"2.0.1-alpha.10+2e4a13c","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"2.0.1-alpha.10+2e4a13c","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_2.0.1-alpha.10_1541630246168_0.7696619587355162","host":"s3://npm-registry-packages"}},"2.0.1-alpha.11":{"name":"@brandingbrand/fsengage","version":"2.0.1-alpha.11","license":"MIT","_id":"@brandingbrand/fsengage@2.0.1-alpha.11","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"37d687eda49fee9699608584cf30867ff70f1db1","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-2.0.1-alpha.11.tgz","fileCount":161,"integrity":"sha512-iQq43fw6o5CFtHI4+21NCvyuHRHl7foqV3g0Dlt4+x7wSp9MX1/HZie128zI1jITCt9PGceWkTHDBYu3+nFePQ==","signatures":[{"sig":"MEUCIADMTpmOb9b5e87QkB67K1lBeOKb+DuaTmm70ZE90gmKAiEAwZOudalbtr5BUpoO97xFC9k1FpmkhY6qbR9lTc4hMwI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":350638,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb5FspCRA9TVsSAnZWagAAJmoQAIAxrMKxK2ekdaBYM00y\n2zSEKZzEVVE/IgdQNviIxMxz4NhoFRFRzgwa5JNcpND2HlFip5Q7pm9BbWlo\nDd7WYUXJzAu7/HeooGfMVE+uQzQY4C9onuIhpLwHnhnyV6488zuQttv3Guwm\ncH0MU9dQuFkdQrOdZLNDbHvSchnArIUhksOXd2liXhVu/5K/9Xspa/e97IrM\nYXGvTd6qn3AXIdUPH6T7jgpbA0FfWSgsUoPXfvghlV5whzHO08aOVx+Wz+Pa\nQJfUzioLT2h+UZTzcfiY5XusjfzlFlC1jD4ZeU75qSQaQBEabQgvBYotWtNB\nGqTtYakghuIV8s/8+PhBrHGO3mThMeo2crMY1URkTQ8XYkvFzMuN8mvz+pkc\nb3mNWfVv9/1aguKqr5H2B9IyOAf4tW8ZmsnFkdulzF6kPsnZ/nx6ycusNa+z\ncTTAnglXllB2N2e3h9xNNhOdDbxcFHZTWiUQ1rZGITxm3TNGMDCDuVaU282M\nBvweeZI65XxvlQ/JSzhISZArhknmEt7ksZkumxqGH1TKbond4BkFbhu0pOFZ\nSzMFkS4PCYj0t1YV4IfJVR+4M1bpjkto+OiKFnop5/kt5IZK9CSKHzONGRqR\n9xUsXKAZkvH4NGKbst5OArtFAObuoUEl3jd8EBDhbjcYrvqXUtFxq5jAGLGv\nLilR\r\n=yekh\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:brandingbrand-fsengage-2.0.1-alpha.11.tgz","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"d249b9298f720cae999fefc74289b856c973dc32","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_resolved":"","_integrity":"","_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.13.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"2.0.1-alpha.11+d249b92","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"2.0.1-alpha.11+d249b92","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_2.0.1-alpha.11_1541692200657_0.3634651052932769","host":"s3://npm-registry-packages"}},"2.0.1-alpha.12":{"name":"@brandingbrand/fsengage","version":"2.0.1-alpha.12","license":"MIT","_id":"@brandingbrand/fsengage@2.0.1-alpha.12","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"74264c6fa0838205a453edafb717e9ef48c89ede","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-2.0.1-alpha.12.tgz","fileCount":161,"integrity":"sha512-PZQqRDZalCu+aA7B/rTSubATFCDGC3dNmibCPSWViwke7+9MPThlRUkqVJVewKNPEvDEvGOEdqJDwLeoKhptow==","signatures":[{"sig":"MEYCIQDHoqAPoYfu44h8ZWhW2xuLaCwJaJ8qPTVH8k6LdAQW/gIhALCTWUo560MjQePRminDYZdOXzuBxldTGS7c+beW0Nzh","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":350638,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb7xc3CRA9TVsSAnZWagAArc0QAJgHX/qZiPpAs0b3W+RE\n1C8SghsJSCcXH5QNwkYhv+aXiN1l9LZQ6cTssxL66NgCEbamVNQXq4kumRqJ\nWgJT4GhC4A84Cc7lLx3QjfXZNsmffXzcPUlp+Ekwlik3hlrUSHypvhvIYALh\n9mtU5Zj9qhuecry5ZY51WMfpxx84a9G09WJrswrdav07EG9e5MvsrxdbOrgZ\nEHn1veQZL++Cbaukmts8ZD6pQETXhtaddW1lX2pmv+2WMCCSt0+M6Mv4qMBh\nH0NClpxV56WwTP/xAicOp55ZHpfW0WJ11YxZca2GFV6j0W0Ss4c+7CFRyDQI\nlBA4YzPt0SmNpUq/EJfKrMjaiOtLMOSmBI8oG/jfMDAmUsBoYq/1OQWVC4V7\n7QvEqU7Cf94mJqu8/vM3218iKDpGphKGLYGdGuZFeMy005PSHyUlW9MS/wvZ\nQtwa/smFoq3EpQZbzFuhXgCGQAZaVCYsbbBayA4rmViBYhDh8emm4cOei9XC\nKfza0ycQsADHIz8Y/WN8TXQslxnLlRiWRN8blGHcTk/VjE1kHaWKuYH9enjc\nQJXS6rhQgT8YWxyl/+A0xsx+Dvmf7Wq0mjeQRpRgya2RWWkMuyB+ZPOdfRSz\nRqrIagN3E9cm0muejdFwE0jDx1uT4+8Ih2Alc+dDSjoJ+x0WdNt59ZGM/fQF\nU568\r\n=1yG1\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:brandingbrand-fsengage-2.0.1-alpha.12.tgz","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"3dc8879938254576421a83c347578e0e332e5ae7","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_resolved":"","_integrity":"","_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.13.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"2.0.1-alpha.12+3dc8879","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"2.0.1-alpha.12+3dc8879","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_2.0.1-alpha.12_1542395702984_0.5296273994715999","host":"s3://npm-registry-packages"}},"2.0.1-alpha.13":{"name":"@brandingbrand/fsengage","version":"2.0.1-alpha.13","license":"MIT","_id":"@brandingbrand/fsengage@2.0.1-alpha.13","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"be91764c147eca2b21df656ee0b8c309bad3f4ed","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-2.0.1-alpha.13.tgz","fileCount":161,"integrity":"sha512-PK/cIE5kkbsWsPmCJd5XFKvL+UEc+pYVVLkyxQ4M6s4Sl+2u6oXKgD76v8o4J/8lCZJw4QlVuewMEBw/5w2Sug==","signatures":[{"sig":"MEQCIAjU6k+O43XQWPM1fILSviOqwP65mJ2AH79gqRNRN6CqAiBJLcaOgrrfGzdLAXOmyKiA8VTcSghaPT1HtFB/3n5hhA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":350638,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb9YAWCRA9TVsSAnZWagAAD44P/3cU+PUqhkchg9VfNWKx\neL9Fl5t8NcKsxJZJD7Qouvbr9q6o/9cogyME/qCqrjzwggjraA8OAJeC30Cb\nYcZzUUBT6nvekahI7pEqXwoIhb9X3EOZJqTa2F0y8sZcNOSbC6lya5KhcS21\nRLYk8g6XG+ntr3cNDYUzN+i6L+tOLDTq/liQftcW77BtC0mVuQ2gojHWt+pT\nnarceBKxMkti84KxwrAsB/pSgFcwltJzv4eaCGNRijNfLRfnDG/OVPcI/CKV\nDYfECZKY3dmsjgid/jzz2LjjjYuVUzOfCRXMhuCPnZje8xTFD5GxSV7EOmRt\nnXh8oz9fvZYxUKacfDbOuEmD34nfnvMH3KSr83hu/sCLtPEM311f2ZtddYHB\nGPnnpSJI1jIvD9ipKU8vmmYZUjwYK+KhJYvHDR+yDRYhPPtgudqbLTsVQ5s3\nB+aWbrbNq1odYHIcx4yLP1RlgZ/GbgevDYCoBzI36h/UVJw8NWMraVCcPbor\naTaZzAnNASluMa81DbEdwBnQqZyfex84zlFlag22sYWns7AXu92zHmetLR+3\nZj34YNcyRuPRD1X5KyxobPrKs3dK5ajiEVrPGdTn4Cj99PHzaPCtfSwWwRE+\nt6VRzPXM6FBPfTajOW87UHiuXbcHR96X2Y7vo8/MXztC8aLkgpPy/x7wRMbs\njx2V\r\n=VAqC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:brandingbrand-fsengage-2.0.1-alpha.13.tgz","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"d49ca2464d1a8811016ce90d8e798ca69d2fdd08","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_resolved":"","_integrity":"","_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.13.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"2.0.1-alpha.13+d49ca24","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"2.0.1-alpha.13+d49ca24","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_2.0.1-alpha.13_1542815765548_0.9615701279046132","host":"s3://npm-registry-packages"}},"2.0.1-alpha.14":{"name":"@brandingbrand/fsengage","version":"2.0.1-alpha.14","license":"MIT","_id":"@brandingbrand/fsengage@2.0.1-alpha.14","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"d247fc4eaa07bffc884f2416f7c9acadae8f1068","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-2.0.1-alpha.14.tgz","fileCount":161,"integrity":"sha512-Sm+MyMMMzkFSEEiCYBKy6kiqHkDzYbPGbnbuF9/QMCPfwPHdEIwWv60HHOcxelcqnNFrfb/hh+88xtv3Z6tSRg==","signatures":[{"sig":"MEUCIEw/UeRtnmBqFr11ux8Bg3DzNJNBp86Y3bs2iNO1ISrNAiEAtPrn7+i+iIhsB4fiDOzymema8IrZ+G2uX6dCtarHQnw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":350638,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcAGuiCRA9TVsSAnZWagAAqvsP+gLrEVtjm65jl2thnOw9\nvlEw8O3R+4JjoeCY4Nx1sTeU4MxyXYFPhdn2KH8t6kNrdk6mjAIJcEqIbjCj\npcrnnzVbNjcJy6iScRNCnNyMhhp7gEkZ4Sjw8amj8QnveUyqJVt8hIndK8cX\n0jOshiTdtxICD2mmdjNOVt++GwseeBqr6klTnlTo+6iJsFdk07HhhIaQirdF\njD+Vuvw0TdA7u7q1+RyXYAbwwAhHiN6+o/weV9+0q4ikbDOp93ipuh+/dnhR\nXCUjz669QJGYbEEw7NMmk+Bsu12O5DW8M5m7zyht4llkURIkFRDuw7z43kBd\nJkpxQ8jDU0yU8oKAfAu5mw+xTrzLrpdGPY1h24a4/NbTlR0wxxQ83BSM14VM\nodd1TykVmsA+GdiSXup666MX/qSaOUP+O+aRZ3mrPJkGpwYW3GY/ygkCHf48\nsFavm5+heE2yAGDhTFDgI+iUTAPLAAe3XqcZlEMKqM4YLn7Rykf0VzN/lBGF\n1Nk/WqS9MW5GceFXyc8645jnjETqhbfQ0xeltCcZW7SBmlniOA6o55Ljh6Gl\nOFblYW5eh+Q/R7ROBm0I9YBmXDsQOPf6NbLKe6DzNojtT3nWt9Fg8ca8zd65\nsMj99Wzh2hGzYs9hPjXQaoP9L5KNEBkLW8h/7LsL0PCN1mVMdiYlHsTzNU/6\nTh1y\r\n=C2UX\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:brandingbrand-fsengage-2.0.1-alpha.14.tgz","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"689e113ea7578bd3426d57c0c6ca87fd6c96fbb5","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_resolved":"","_integrity":"","_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.14.1","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"2.0.1-alpha.14+689e113","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"2.0.1-alpha.14+689e113","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_2.0.1-alpha.14_1543531426006_0.6757204410009707","host":"s3://npm-registry-packages"}},"2.0.1-alpha.15":{"name":"@brandingbrand/fsengage","version":"2.0.1-alpha.15","license":"MIT","_id":"@brandingbrand/fsengage@2.0.1-alpha.15","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"7321acddf856ab8235e1bcb66257211d4343f7e6","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-2.0.1-alpha.15.tgz","fileCount":161,"integrity":"sha512-sdSf7Jeogj2diWwbUqbGbmqdVwDkmObobUgqjvYyy3OhHaA5vFdUkta9Jt+kL0nhC94lTHzsOjaH579sNoe78w==","signatures":[{"sig":"MEQCIBwCD9hdOu42sM0136fMb4/6oiAXHMLijxIi5dXP1DF/AiBEZtWQN3Z/QJziPqN5T8N1eQMOuqzFh9rIr/obiv+wTw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":350638,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcAHIKCRA9TVsSAnZWagAA/3IP/RetD9xOubbwUFeFT2xR\nt0a4utbIJ8hkYlsELAxDk6P91E/RVXcrwovLb1cKKKvAc+ewAGF9UZTdXmiZ\nz2Hh/k04net8aFUIVQ6yRnEsKPAxqbha2l4VukTny9KedMkYR55p86G0S2mN\nMiJMmoxJ/FwCCf9t8d9ttYgg/ELWC7SSsYRKezzNQJMkAlD66osTIFHRG58K\nw8Q20PXc/SQXbuh1blhc7orPyMo24UWuklLG8kLtgKf8w/HbTjLYKgb7sL72\n//HLlTuTHquT7kgVq+HtqqmkG2SigmIbGp71FF7nSWWm/UAnWad7CQrt9koN\nMwoh8mzWY9BWd2g3KQewU7URRhaEDcW94yz//o1qyr6mznPdzgmaPWaFIw6Q\n0LsdR2iES+LthH5iWzZrqwqHuVNiDbmy2XWasaM/VzxqqklL4TzJk9NvJ1uz\n0bm/329rGVHw1u+iUzPOkVITCornbG72WXbMa+JZm+pIFydr6rOs1KUarrDK\nulJ92DlY0e/j27mAbu2HljXFExaj738zwYtbdbtaliPm1pMl95K4JWaFeODn\ngf+9Bl4XyeQG2j4kn6PQoRnc+nqjRlyW+R/cGdmDsOMNwinFJ1+7CCT5fB2u\nE9BmuseU8c2wzf43MOje2v3FUOy0VznDxgRg/GldEjnuvrnLpanYKK4FWyFA\n40dA\r\n=i7NU\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:brandingbrand-fsengage-2.0.1-alpha.15.tgz","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"108a0d14c96bc9e0388cc6fd51dbe4ded16bbc44","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_resolved":"","_integrity":"","_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.14.1","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"2.0.1-alpha.15+108a0d1","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"2.0.1-alpha.15+108a0d1","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_2.0.1-alpha.15_1543533065883_0.29641804583843134","host":"s3://npm-registry-packages"}},"2.0.1-alpha.16":{"name":"@brandingbrand/fsengage","version":"2.0.1-alpha.16","license":"MIT","_id":"@brandingbrand/fsengage@2.0.1-alpha.16","maintainers":[{"name":"alexclinebb","email":"alex.cline@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"e4d0cd6376931b664882a4362d8d7bd069f83fbd","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-2.0.1-alpha.16.tgz","fileCount":161,"integrity":"sha512-Juvzs8kRRFKzRzF+4030+Eshs9mwjxWlpIWZ5PjvihchM4leijbnafC+VEPdzghVLpUQH5fhFTeVU3jFlrFXTw==","signatures":[{"sig":"MEUCIQCsT9mNDc/uZXDnEx6N4jKAslU84El+B/kqE+HEO2bdcQIgKiD/pHKP5mhSFlPi5hUlraYWJQvM0/CZc9rp7RoW8/E=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":350638,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcALD3CRA9TVsSAnZWagAA4EAQAJTL1dtOJupMYmPjprCS\ngfNjqi5fSCwsywSFkuaHmZFJqQkTCoe7DvDeE7xS2QcIwXMPnSXnxNGNP+Z3\n8C62VwejdpwwD7Bd7hAnLFNpHZoSbL4hT9mIEO82aTI551kwsmhION1oJyDV\nWeN9mXKeCFTi8dsSW5lm2NWd/iPhs6A12TOTggaJ04eICzo4NElpXelB/bbw\nN5v5+6XLRLntj9nlmLWeGXchUeIQ1Arr/CEP1IiAYAZu96HZZ0w0ULtyovZT\nbtGhVcv6xYt3nRXos5v53ykfZD8WA87GB6O8thopfCpoRBZIC2v1T3UG8+Hj\npj7/eRzSc5hN/hVC/OvW8KLd+do/Cxnc+KedDhl99UF50ngCdFPEAhxAJDH2\n/UXbTmwwEfLCc7H3dsY6RIA42sAI3O3zx1HgFmN23DoQzLqlXP2jh8YNTUHb\nEqGBmw6JFJwP5zo4kT2F6MiwNoQTaxjG1SANK3GmRj5m/36bYEhVKl7bE1iG\nXAFgwFoXSQgippymLJK6v1j5haLbA3IfTGm3rZ3CmgUInNXU8ojSM4EBxO9V\nmhhZIFTqeT+Esz7SnkBchicahh18pEmVwgA0xsp1JE0Mbd3Rn6uaBs9/dpcw\nhx5n6Kw6fsDS8Qiz08DuxK0COKQxdfHSGNHp5CVNf1oQG+xt/r64SItqrs1B\n5tdl\r\n=EkWC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:brandingbrand-fsengage-2.0.1-alpha.16.tgz","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"2c356ca519e52dc2304b224dcab764ed42a8968f","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_resolved":"","_integrity":"","_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.14.1","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"2.0.1-alpha.16+2c356ca","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"2.0.1-alpha.16+2c356ca","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_2.0.1-alpha.16_1543549174842_0.8765232416009043","host":"s3://npm-registry-packages"}},"2.0.1-alpha.17":{"name":"@brandingbrand/fsengage","version":"2.0.1-alpha.17","license":"MIT","_id":"@brandingbrand/fsengage@2.0.1-alpha.17","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"beb88eafb5513d52003622260c0869d3ef4d873e","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-2.0.1-alpha.17.tgz","fileCount":161,"integrity":"sha512-UD770wTSpmGPfnuQ8L8KQcvBkz5sGyqntyv0Xw1qT8aKwZvbLUN7c5+cfY5F5JmqsDV4m7iANnP+7+r6M694/A==","signatures":[{"sig":"MEUCIQDpg7v0T2jpW34Mr7N3EoU+hq1PucC6uQuvmJ9WOHGc9gIgacm38E9/E+WXeuCim9pz/CyyrB5tvKO+zqQzUbO/Ywk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":350638,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcBsvJCRA9TVsSAnZWagAA0W0QAIxfxGMvmNKKbdLTUE4k\nNNgMoHZ6vBBIPxKrXLXXInJwHWARXaLX3iqFUl7EeNAQ+NUqUub+3vG05Qbb\nHOswdLujhSgF+5s6JWpNd7/hVRm+5mdKQiSrbnQbkM29I1plFs0uoorSJZWz\nEwgGAA7lPvMTYseGzZh3W/3kTafOmZYYk8+MX61XW0MP7xZQLI8HdcLhamiF\nTgHY9PJrIH8RMf3gg0ip4VYMBvqWX6GjO9RW24fIcZMVZQsFibVtemUh8Meq\nLXDJOzzfPZUeBPsvnJpoWLx4gwXjtTk9uwrI8Q2hqjF8WQA6fr5x1zwV+T5y\nPZlkBPogtAKMD1UrMEbOPKggJ4dzMceWwIbg9p70mRz4i9cjcIAWyzwFqtcA\n3coHhfOsWY4/aYSYYiTkyNXWoXVlG79gnXgNeCN89u/P7aXSWblMX+XsqpuI\nmk3PdbwwDUurXqQmx7R+x9D0ROfQdUrOLYHYxI+knglw57B0uln6yGIkV3BJ\nPPMRuaasl+aSB+hxpwjNRrFXxtAOKrjk5P1cm5ib2/ITbR9Vs4fhpu5N0ijE\n2oKRjcAir6NqPIBXUHtFyeMuczEMXKbOHwLLFTKIJT/BHFFY0g2ebnkarjMo\nPGYJbcAO1NSdOLD1KAc4mKXkAi6odi2Gc7jeMaIZOHyGJmHB0sFwmqiHiMpJ\nEtgZ\r\n=VmPE\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:brandingbrand-fsengage-2.0.1-alpha.17.tgz","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"07158ce6d0f7c2cbfcaa9e15b1caaea408f07b1b","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_resolved":"","_integrity":"","_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.14.1","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"2.0.1-alpha.17+07158ce","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"2.0.1-alpha.17+07158ce","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_2.0.1-alpha.17_1543949256486_0.7598439599164468","host":"s3://npm-registry-packages"}},"2.0.1-alpha.18":{"name":"@brandingbrand/fsengage","version":"2.0.1-alpha.18","license":"MIT","_id":"@brandingbrand/fsengage@2.0.1-alpha.18","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"ab8fdc4ca208c18e13552beaab39706a5b466912","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-2.0.1-alpha.18.tgz","fileCount":161,"integrity":"sha512-Sqfzdr7aDw95rvNS3SeEO/6coAaY6xTQLLrEWmrjgnXu1TG9obmhFLJDD/B447Wlh9Tx7sJ13F3F0Z3+iFEcog==","signatures":[{"sig":"MEYCIQC2vXtH6k4+omX10fjtzPl3TKpMktBSVkxXYDYbEmLpSQIhAOdqja0XJ9gVBtcYG6wp+C8j326Qzt3xFWRQUaKt4tXz","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":350638,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcCDfXCRA9TVsSAnZWagAAdJEP/0jfpurDIxBpYY90PhvL\nPF81KzIRpCS+XnyZJzrFqaOWMJo9RPjOI99IfSN1ie1j87zdjla2WOj/YdFO\n/gTgVg7/nicLKvqT5GvP/Ukj1tyRipIEFa6w4U87/l9jp9eTjDGyFi4mEG3q\nQQlNMC5zF7csGkfc3YixNVM+qOTdoKPnbt5JQtRVwc0cln08iYDwQC/sHOgj\n9Fwht5cNKtxMQtW3jyWlvgsu8tPh9JqpYO41qo4GZG6Kk+sUpSKjETY8S9J6\noF/NVzujem2yL4lKqAS3c6g+u9kh0kP5CJzFLPyqGExqkmHdMA8tzgEXjNe3\nrVytftumeDl2qy2mNjKKCIkSobouNgG3IkwVHlvS+mLT3SDXgnG3kaI926L1\nYaEjK27EGsB7aanppfCErsOnWKDQqYi/tpTnD9ZTteJ2XOH9lVms2i7QBzre\n3y2kAl8T4SX8E76R7sMNi87PZ2XNcvyhy1ThAwuquN5tFlh7abMVH+DhfRfu\nS/tyBwncUSP44vMr2XmxL5wg7xH4/4/UW+Sf+zqrKV0x8pBRmktep8DLLWy9\ngJ3t5bNArgGhgPzHFyl82mMxBAuG16ce9OCVbdX0vfY2cvCS3uD1U2wIK9sz\nSPFvbnLJgbfuIEoK6ZQDdBYqdAHwWlpg8N8/jNLr+ctwW+ihZB5AnblFKOEF\niIZR\r\n=mexx\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:brandingbrand-fsengage-2.0.1-alpha.18.tgz","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"b6ba811acea1db8b5b2da201fcbc3b45f6062106","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_resolved":"","_integrity":"","_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.14.1","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"2.0.1-alpha.18+b6ba811","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"2.0.1-alpha.18+b6ba811","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_2.0.1-alpha.18_1544042454944_0.14549373181417447","host":"s3://npm-registry-packages"}},"2.0.1-alpha.22":{"name":"@brandingbrand/fsengage","version":"2.0.1-alpha.22","license":"MIT","_id":"@brandingbrand/fsengage@2.0.1-alpha.22","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"499fdb55399d9849e015db4f9ff1559fba34d166","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-2.0.1-alpha.22.tgz","fileCount":161,"integrity":"sha512-MyHsAJCabqEa05yGZsPg/zrIGT2jNStKdUPgj/Cm0W0M9R63XfiWGDgQOMkV+NCZLsjK6wAEjMNpE0ftfDfNbw==","signatures":[{"sig":"MEYCIQDWIdxI69wmcDia1SiO08QxL+Jdnu2JHGtRxFuNrOi9/gIhAPiACgDwbmTiY0aXxa77FPShiWJ4fzmNBLpRwNOrhsxP","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":350638,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcETSnCRA9TVsSAnZWagAA3b4P/REOc18eq/hnAoRKOc8P\nxjoVjK0VuT1s4E7geGWt1gjOOP7Vx5pwy+NIML8y2aUqNILL89mF3+Ar9bOM\noKE2sjmKcPraJkrLL8z4Lf3TRvawg32PBWWJTE49Ds9ILsufS3k+iz2gyQBZ\nN2ogO7l3OtyEG9VKhmCJilygLcB5mfwohdAWBabqe0Au2jeHObddjmEWlpM/\nckUbAX4UAjLmaV6Fr8V93D7dZ6o3q9O4CXGFVl9P22H0CS2G4xNTRwZZlOYi\nH3dSSA4oLCunA7/68zg3jasdemVYAiug9rM4LtXwAyqTYx9NzGpCWAvtWk9A\nlVUvOK0EJb/MlaffbTDzFGDADNaUhTktlG/OX1Udt2cOlpHJeTVgHXgGOHEq\nnG5ZFcvdtJ21lq0R4WaK8u9gJkJ3Y54gBM6nmbRTMacxmfePkd+9ATtwJzcw\np3joOlyopUa32MGNSGFy7lsCPTw+sFNcj9WUGtdOAhwEBD2rU90iaViAtCiR\nf+8ub8XNb7aYw/637x6+lClpF1AGXJYkEzKORQNT4J1g31Fqd1/EIn8A8yC9\nT79eA+lesaatx2JAcs4y2z6Z3U04IsQdZeOJmEFqlJ60QKMzjI5a7MBaRQoY\n398oVeaXx2G3Gn707D/U8kaA0eqKByc4IOgYf45Q/+nFbRwwo21hKvzauAQb\n1X/z\r\n=rTFC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:brandingbrand-fsengage-2.0.1-alpha.22.tgz","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"d0ff4c1695ff08390337ca00b507c826d89f8aa9","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_resolved":"","_integrity":"","_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.14.2","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"2.0.1-alpha.22+d0ff4c1","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"2.0.1-alpha.22+d0ff4c1","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_2.0.1-alpha.22_1544631462497_0.9477641392643756","host":"s3://npm-registry-packages"}},"2.0.1-alpha.23":{"name":"@brandingbrand/fsengage","version":"2.0.1-alpha.23","license":"MIT","_id":"@brandingbrand/fsengage@2.0.1-alpha.23","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"7a0b1f20509105e39143649a8be19c24842fcc19","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-2.0.1-alpha.23.tgz","fileCount":161,"integrity":"sha512-sY0nWsqcrJuUqI94aEl+EeWmjocF3Dd45ZXrw8vyygSU6TLcFchIP15T7i93dTkt823yRCsx5/lD6v3McSyTzg==","signatures":[{"sig":"MEYCIQCIaEjhGz/JHtOUb+/BiH9I06iO56kXnXsG3efPEJsxawIhAJuarqtjwONOl2KLfMJ/yJyksVYCt7sOFoy2GZR6V/e/","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":350638,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcEXh/CRA9TVsSAnZWagAANBcP/2ZUfo9pyDOPBlX1Rc0C\nZBUp54+8mGm4B8KVvvkyN4z5LJWTTnovklQ6sCCzcxBvvYr64u0CBj3W4Emf\nGKwvXmu4kPCRAgwuXCR1Y1nC1cn14Riy1X58NKVTZ8wKeJmi5lq6IgPlP+nx\nvvFke5BE71Y9wBlbv/tyiNiUnkdVcsnCIvSI45uN5KT0ruNNcZADyjIMxTz5\n0itYdxM8/YOpud+RJSFxhD9vaxrHnxzLbW+hdANoT9DbDxsyouTTuC9z+QnX\nEyyEwQ2pY7fkrQno6ofI74cm4OLMRrAllvaPi5m2HvlOe9Ul8DTrqaOc281K\na+9+8HGLdc63ZsBw8RhbedYciqw52SCxZjlZ08w9EwDa0PPlAPfcYCpj3QOv\njxG0/6s+mcg37MU3HMy//PpCQZnQ+2kXSfHAfbwyeK05DhspZdGIGANr/M5U\nwrCcLEGJToB7scR1IRa+fpUOOqpIW1dphNpIJcCrQzL+WT5GfEUGH4wdNpxs\n300NiWwJlrkNz8Tk+VAdUZ34qWFbyvOrnMjQ/UFC5mgUqGCHJOY/HUEmJ5gk\nQ5d51Y8q8it3iiUaUHUphm6HyP81tDPrqm+bh0S/prxwdzroRHd/UNnaIJO6\npp+1gi+chrJwp4PqBWLY9GT/yhIVKEKjq4KfeLL4+1vnybMz4OfOvOsHHE24\ncTJT\r\n=2u44\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:brandingbrand-fsengage-2.0.1-alpha.23.tgz","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"bd76a08eb60947608d598931a979fae6501bdf8a","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_resolved":"","_integrity":"","_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.14.2","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"2.0.1-alpha.23+bd76a08","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"2.0.1-alpha.23+bd76a08","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_2.0.1-alpha.23_1544648830478_0.7598675812539557","host":"s3://npm-registry-packages"}},"2.0.1-alpha.26":{"name":"@brandingbrand/fsengage","version":"2.0.1-alpha.26","license":"MIT","_id":"@brandingbrand/fsengage@2.0.1-alpha.26","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"f40d8d4442f1d6678cb04611301f0f5816585be5","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-2.0.1-alpha.26.tgz","fileCount":161,"integrity":"sha512-Sm9hI0j5Jp1epCApF87v6kHNuHWmI2+bzplsc6IQkyjLBX+DGuunJxgHX3t7RxHPvd/uOFYDKU4DZCg6YZc2fg==","signatures":[{"sig":"MEYCIQDLlWDpWAiZfBD8QHLZC9SFALdjtXR5Q8rX/0UTLo5AyAIhAOf0wfU2u+oTW2n4b/0VXexVaVrwul++6fd6K2FjIhMq","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":350638,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcLmGLCRA9TVsSAnZWagAA0joP/2LPc7BNOnRl0jQWsjyZ\nmO5gMgkgZQqTu0aqmGXeX2/iUpVgVwVtSC+WLBLwhmoJx4fTaaEZX78Z+cZZ\nltj7k26T12REkjpJV1P93mlp3EbYHAE2n7UHXzZSNf+F55qe/lhzCmfXuPQT\nYBI14CDqze+o+aKtsGfTiU76Mx0qBJ7CyHUdE80XWUjnnfi0U1Kc5sgo29FY\nUVqdMiLcv4KKJYChOYY1H/OVKQ3zprrY3uhQRyNjQkW9IzTd3ceZ+2zUO0Q9\n2E92g5M5kWrYYUMtkai0tLBBwAGu4ZEbg/QdU4XSfvzwIORvjKP3KyduInO4\n+zp9DDLIX6ul8f2cNfSmNzyVKbo+E0qxx4JJoROTX9Mv37UlSdxZdWavXUyO\nd9/0ghiDL69flQzhLSxK3u0CYIBc9W27FAEjzD0cVu1GJdmsQuZyIMfG2F8X\nE15H5dPy7aRVJIWzzWPKM0UHWS1dmDX+UXeoJvBqYFE1FbaLbTQ6i8KJzgy4\nD6ASwkLqoMyvJy6fx0YMKXoEq7FDaxXzaBsRmbOYwEQTtHCuii0Jvc4BEs+i\nOmGi8XxRbWr+yta8u/B0oZOsbM9fPZKk98BFfpO4oFhTnrSfVX+22Cvzti8E\nbet/gE5ZoC6eI1y8CNQ3UgStS6Z0W6RfAdrdIH7Gc+d8sUFTvjJS/47+807p\nTYqp\r\n=U6iE\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:brandingbrand-fsengage-2.0.1-alpha.26.tgz","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"49cbd8b72945a07f7be0a71554200727971d6739","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_resolved":"","_integrity":"","_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.15.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"2.0.1-alpha.26+49cbd8b","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"2.0.1-alpha.26+49cbd8b","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_2.0.1-alpha.26_1546543498632_0.3450845457068188","host":"s3://npm-registry-packages"}},"2.0.1-alpha.27":{"name":"@brandingbrand/fsengage","version":"2.0.1-alpha.27","license":"MIT","_id":"@brandingbrand/fsengage@2.0.1-alpha.27","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"sdovenor","email":"sebastian@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"bb8ce8d7845bd1644a8b53bc6394786aacb99baf","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-2.0.1-alpha.27.tgz","fileCount":161,"integrity":"sha512-E3dkXWAOj38Ztt7W2lDOpugl9IP9+OxuBlCrqy3bvjytwL1zig79IwGq70h8NVOe6zK1hMIVXQFEnzfS5453KQ==","signatures":[{"sig":"MEYCIQCMFDeaNouTZ+wIrnb9TZtQS+DH3zgVYtj5bJR/Ara6iAIhALYzN4KD5rXL0qzBQA3lrgwFZN7WReIw0kd0kqAAh2zH","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":350638,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcL71iCRA9TVsSAnZWagAAIToP/0ubRJEblJfTO1JQpf3/\nt6xz0GHsXh0NIr8agtXZMxMexnITbAubEOw+GO5otAnncnipPC+wkGyfirLO\nT+ns80jWeqCgOw6a2fAPYcJst5bOM6mKkVPZuac1yA72trKaPQQLjliL09dX\nJXYPBqm5HIHXgm1C4o69f0waptbKdWrGavK39xdV2HglDVKsS1J27rcYxHnx\nDFqyqBApMHDaJUUyTE/jftiM+oT6vTgcLu2IIXaHmCDq5O1ljy76fo4MCwHI\nszFOV4hECNnr9VjM+MeEoDXDUoc/L0a98ZsISemdJUVzuZNwg+mpJMCjzKlo\nsMzrU1fHjkMsqdiPVeuAAI2aYBv6H38mMNhHUxCbklzA2eNYYSkriBBk1FcK\nAVEhNzL4E+XTruYd0hy63QkOseq2Q/wuLkTUexzeu0k8DgxADvm2jBY0WcAZ\nT0I6JOELbDvb1U3REh/AE/DkfTKI+09V8SWGab63uoMhgfGuf529HmFakiqk\nDNfxv2yCJSFn3XAMk9pQOLGO7MN9cSlZOBSV975n3mmCHJJY5hg8lDDP3Bat\n4ZM98A18F4eR/IKw96U4QSRULJsCCmPlfZYgtGEYh6atqEFlFXZmWRJjpXEO\n4SJ/iqFTSt1vVSj3ZFnQfMTMBfr7e0pbU8V763R41AlFNa+GSo+5ppiiygJV\n73nW\r\n=cpj0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"9f6e97e850ed3caa1e90009cbb4065b04090e18a","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"5.6.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"8.11.3","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"2.0.1-alpha.27+9f6e97e","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"2.0.1-alpha.27+9f6e97e","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_2.0.1-alpha.27_1546632546147_0.7043031069108037","host":"s3://npm-registry-packages"}},"2.0.1-alpha.28":{"name":"@brandingbrand/fsengage","version":"2.0.1-alpha.28","license":"MIT","_id":"@brandingbrand/fsengage@2.0.1-alpha.28","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"e7901c51a9cfd3ec63927116117b385c0c022f23","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-2.0.1-alpha.28.tgz","fileCount":161,"integrity":"sha512-rwnY3PuT5AsnN7xLpSKZIq6yPmYBgbXP/a37tVa8jC4Ux4MUCv+ll6J+6jn8biIZK8oRvC/+THCTfxdv135n5g==","signatures":[{"sig":"MEUCID2p4MdtzlyilKw1r9Xn4Qds0bAxJXCu8CuDeknkoNAIAiEAueDSbvt+9WXfQtNF6zRoEkcuv3pSRrbmVvQmkYDLfhs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":350638,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcN7HDCRA9TVsSAnZWagAARZ8P/Rn0W8r9cgi5wtIp8HbH\nIaeWfNkpVMBE8goPxxtbJ27DTMLQLb8ehFPO46MxgPK1vyh1X2Pns3dFZ2xB\n2ldbFsxnR4nWiRd+sP3pRMYmj6MKHFehIygP7CZ/i19nZBYPUxvS5qXi+dLj\nMbkanhb5rN9YTIJ49CHcdnVs+K/kbCsMTfGLWgYYcdUMkd9abC4GZrvDlb6M\nxJS60wwDRhSS+9gn8OHQGpMMsD1Ooeue/QnYDWDd6L/u/8clEQx/Zr7Kf6LH\nkJ/uWIS2hrN3N3L8lJMT01yv7yS1/x8RrwGlbiMPU67bcWaQxYZe1DAmpSw3\nB0QXHOg6SmRek+MHgxQwAGOKsQoGE3b+WPSJ8i1b9jS2zdr5QXW9k4FF1Mrl\n/vXZDlOtBdTOjmzqLUHO7ospoO+kdgxewANPmch+KoNUsoUDH1i5eQc+zPB/\nwDVJw+g4XEgkrkmEcXPssJxgJOea1X/x2Yv+TBxP3mSWO/p6e7tuCCTaEX/E\n8ZblWA151f9pruAYxWA97R8XYptbTFHaN13zRaMzLTp30bQbK08V7VpurkaS\nxIsCxVYBMtILqBJbslDkpHHAWZMd/B8q0xXFXddbiKIjFwoFileRrct80ap8\ngB9iL68Pp8GImq2UPFrkS2XuHsV3BsrNptVdDxSGAaJ+KJ5uO31VCwj1rbCl\nYBlF\r\n=AFee\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:brandingbrand-fsengage-2.0.1-alpha.28.tgz","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"3c9f28293b9f9a4507d8461e8fe22a9a1fa7a284","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_resolved":"","_integrity":"","_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.15.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"2.0.1-alpha.28+3c9f282","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"2.0.1-alpha.28+3c9f282","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_2.0.1-alpha.28_1547153859267_0.6729015526824542","host":"s3://npm-registry-packages"}},"2.0.1-alpha.30":{"name":"@brandingbrand/fsengage","version":"2.0.1-alpha.30","license":"MIT","_id":"@brandingbrand/fsengage@2.0.1-alpha.30","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"dd8c400422ad6aef827de593d0c4e97b639bbd22","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-2.0.1-alpha.30.tgz","fileCount":161,"integrity":"sha512-Wo1p1kPaEiqiuCHy5z0IlrsBHKm044B5cgaXgt61S7FQqmlzezAx8HQLDTrbE47l+0blTjRklFzayo8gdXVLIg==","signatures":[{"sig":"MEQCIDUV9V9bE6vfaLkH5v+23CJcJE9wtAkwVWBezeuic0e/AiATW1N7iT4+zTJwdxJbDpxEPWIKuL6h81IuJFMCQyrZEA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":350638,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcPO45CRA9TVsSAnZWagAAtjgQAJng99bVPyQy87FWqGqC\nOAoJk2iTVwoDy06WBvyoKeAceEIraAFIwacZvNvWSh+T2PvReflK+C+mXsiF\naZ2CjmDPmLteCPerUOjktygrp/n1PXCvUJMfMgOfVBUUXnrkE8p43Usgg5uc\nVjS+X3XUF4dBIRiTSBWIh9VUtBIp7Elpx7GXJwhv97PiaWA7oKvbICGS3Rzj\nMIsm/Gl9oD/HCRnXquPzYzkW1mo4sgvau9ldlt18fslwSeE2IwTcVogZ/sDe\ndt8rozoxnIEeGf2vIB7SRd1EYLjPqu8JMbgZdv8gR8s1dWYnlpIkfX0dc8JR\ngMUsOyK62RH+Y5913ZUKRrrPscE04aaXlUQ4VME3OdprEQRMmJZIbu63CGjX\nwgA0eNIk1ZqMOdCGr3Xf/rjx3gsNN/58ivUOnszXiSuTlIKD1Y+7nQiO0iVS\n2M/b6T/V58KFhJzFyBlosZHq6Kg3ASkkoQUGheFFw01QhkWlw2llExLyMuFr\nD5vYdhQMp4SnHgbLybuGD5J3bqsD4Uvo0mY0l9lac0VHmWLMb+xaHASE7duR\n3F1jfzs0CEbax/6f+IxgXhujKI61xNemR8SVE1b98mhHtXVcRY5FWvf5DsV/\nUPNO/auvkWPwaWRuirauwi6/SknIwSg1rVfG0zZL/U0faSVjcYG3y6JTE6v8\n1dkV\r\n=ZmET\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:brandingbrand-fsengage-2.0.1-alpha.30.tgz","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"140cf62ecdc96cc24adc375370ff9c926c9afff2","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_resolved":"","_integrity":"","_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.15.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"2.0.1-alpha.30+140cf62","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"2.0.1-alpha.30+140cf62","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_2.0.1-alpha.30_1547497016866_0.37430251538685333","host":"s3://npm-registry-packages"}},"2.0.1-alpha.31":{"name":"@brandingbrand/fsengage","version":"2.0.1-alpha.31","license":"MIT","_id":"@brandingbrand/fsengage@2.0.1-alpha.31","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"c55e8e839edfd5e4c8c16c415b0142e8e23279b0","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-2.0.1-alpha.31.tgz","fileCount":161,"integrity":"sha512-7dDAyphnsPkFiWo5dlttsy4h6324mA7e1PMY9XaonVwqLflemlaX5TlBIL/V7TModP5nC1hdUM0Sv+G0d9sUuA==","signatures":[{"sig":"MEUCIQCVLwV3QMxgRGXL96M8ikQ9ib80QKiTR6JTiDRhsKiFNQIgcoGODSTB8dPc+LzqI3EvjI3CMr5xQRk3GVGxCtiMfBo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":350638,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcP3gyCRA9TVsSAnZWagAA4UkP/Apd/bTXzPXYUxBpkhZL\nXVnG+ZEFWkhsLLhAKcZc53LotbgHJmUQqJEL9lqnOYiWWBbVZ+MrTrua6wwr\nUly3Up5jHUQDPM2aT8IjZJb814wvEhisof3WPyEEKKlU7ViWdx+VSW7uJMWX\nZs/8cGQ7lsd4ucZYYTtE9L4ZpwlX+VmTsYKE2c+o7n/wUmKoKuJvwcewmbKC\ne+o8n0nxhfOIHJ3rRBnRLMabs2GYnxnEgcCUahoXvad6iagjUUGROzrAChuJ\nxNGmWcJaBfl/kAk0kP0Xd4nhFSGUBYcqSSt8aJIc9Ic62CtGNWDuugmzYiO0\nfW6huBi39fEkI+Hbel7YwcnwEbx2gm/IB5UnIVPEk3/RboEGRsznBQe38tuP\nRnOVK7NKFo/9E5t7CsA15fShRKQ5VPCKFprAjC2R6XW7AlrqLTi1wKcl9nmG\nEOdd1gUEfjqvC9NlZvFtOW8KdhcdYGM2fdRSJatyEer0ztKqEUJU0o7NGPv/\n2aC/YCVerAADqEb26Hqkj4pClyZbQnCHYrdhw8AkIZ3jw+MEZg/9qKaKwiQU\nIH3fdoUgAj97kiphrU5h/0uLBtgphufNr5u+zTYj8XZfyxMoxxl1rg9J2X2V\net8QxzHTdL8oRS63B3vFWWbEaoD4/7kKjiN2u9dPeb6+1JhMvV/BxYbXeoPJ\noniv\r\n=s+O+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:brandingbrand-fsengage-2.0.1-alpha.31.tgz","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"f1b402373444d4ae257f2f565c9ac22be7e42aa0","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_resolved":"","_integrity":"","_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.15.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"2.0.1-alpha.31+f1b4023","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"2.0.1-alpha.31+f1b4023","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_2.0.1-alpha.31_1547663409988_0.27229564770652104","host":"s3://npm-registry-packages"}},"2.0.1-alpha.32":{"name":"@brandingbrand/fsengage","version":"2.0.1-alpha.32","license":"MIT","_id":"@brandingbrand/fsengage@2.0.1-alpha.32","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"35c94fe933c859d17a59ee7779d3fd8b3cd8c39c","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-2.0.1-alpha.32.tgz","fileCount":161,"integrity":"sha512-c58owzLz4YrnFe5jaHvlg3xnIaDwtBlliZcrPNpc2FHQ2ZDg12r8lScjrAFMWj2A9jEr1VZAFyfu+6+0SNUn/Q==","signatures":[{"sig":"MEUCIQCdGH3c5fggqREOaKiSL4JHUDaNyGOiqZYNN9HtZ33PgQIgdz4JDXhTOOXI8/PM50EyTngRfsmhSUrEF/6SygMOOac=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":350638,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcQKukCRA9TVsSAnZWagAApWEP/jMwr+NU137kfZoyoW2A\nD870dYRQ6qECpFWFL/+W5+n92zuLoRSgUCYbMxsOtpjDdsW+ykRWAri2lpBU\nw89HZgFREEYnEzuXqTRGuU4gxhLwr02HY9mCkck0CI0bx6VU6vsZWPVTzRt4\nszSWJVQCg9J1WCbUutm28H001I8US1TNLnMmrN0VjZaGYneJvdkKdKu3uPpJ\n7ni8N9Lqpesj/mj/VxBbsneaXvfoxlyPc3eMLP0m1LFjf/NpbvqyKvOjJL2o\nu4M3DuA3atJvmjy2fXaaw355UjoBwa1a3wXRg6yVAqSpcZULmA/pPQFPTbbV\nFX2MG1kUWEdNSXWTtuVRnLB0lsUdo61CB2HsRvc18TZIMXDFuuHbTUjc56Hm\nuM9IKTkNpXAY6UvbVekWI9ZzgAHKzzt0PgQ3sibJWQ2yz1BNSXODz4ZLDe2P\nrj4soRbB/xf4+D7k4ZaKbKnA/Rd4E67IteVb2vS5zrYYRuuyje1TDqs9KPrI\nUlD04X6k/rlKiAyW4Cj1l68TAjI+LvcyT7QRFCehmdneZX6ScQMQok14fTYs\nmL0VHgjiNdpHi8AR9ksDGQmg6H5iKsvfvKe7pakAAu86y7lhthM0bLvE627y\n8D1H7+ur+acF4FosGahPBWTL06g3UaDUSuicBZ+K+J/NQGozanAKqOxs4J1y\n3BE1\r\n=7l3Z\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:brandingbrand-fsengage-2.0.1-alpha.32.tgz","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"40887125594410b8e8bbd19c0e6ac395a3e29824","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_resolved":"","_integrity":"","_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.15.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"2.0.1-alpha.32+4088712","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"2.0.1-alpha.32+4088712","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_2.0.1-alpha.32_1547742113798_0.2778732646244575","host":"s3://npm-registry-packages"}},"2.0.1-alpha.33":{"name":"@brandingbrand/fsengage","version":"2.0.1-alpha.33","license":"MIT","_id":"@brandingbrand/fsengage@2.0.1-alpha.33","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"9a33b631eb8e78042f183ab2f5be0de4466a08f0","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-2.0.1-alpha.33.tgz","fileCount":161,"integrity":"sha512-qMx8zBGZMDnyYTWEro+HkRMljudmcgLZO9xs2EV47TcS5xdN+D0fPBhc3OsBuYxNciiZdTw6d07ZliWuX5bWlw==","signatures":[{"sig":"MEUCIGZq6/tOJpCBqnnwfSs4thomv6mmAtTVY4sSzh4aDY3aAiEAh2ZscFUzqGS/ZVQD3R8IxTFBgX5Mx+UJh8yFWT2zRCE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":350638,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcQMq/CRA9TVsSAnZWagAAMqoP/3OQIPRohnJP4cpq4aTE\nRId3sq1+MVAXEsTbOS1EXU4/NdRzSBs4PdZie0Y6vumjIK54zdhIheKIRjdH\nnYTgqsKbCzVyfvoa+adwxITUvperYi2URBYnT2gXlyEVj4cAU4uRHyxeGJG0\n661MEhRswQ89Ih7B2vzsTkbB8wPPs6s1Og2QePnP1OSZEyTjgJKWBSMsTtf8\nxCf9lm+pKRsUPuGR5rMLEZSSaP5Vg0Rp/XhkxjMk+8X6gfCBm8mNAuI0xBR6\n3hBQQ/erH5xvrLNyONma/ZWGh0C2ctQGZBGUlg7QffqYpKVHWnMdid8ahvjD\nH7lCv5qqq9jnMg7mfVQ2OrcTDZp1BI9wInUR+qdxlrg2sNf/6U2ojIx35YKR\nFnh4nZwibpraooVaAG6iu6Cprl9ThlL6MolrImSuVzyV9ZziWSG5sh2Fm2wE\nUvSpDufPb91pYbsr2HUI64QJ9QH+1v9XyLY3rR4qaC8VNsfM2LVxbGXj8VOr\nfdO6wXkaS5XCwKPDcZsnd2v8PfnZLNqb9s+e6tTugP1vPrX9pQLrTjzIif3M\ngHXLAlGw4qHShnRzfaqZTw2u8RKYO7LxZNkefGUtpYxCtSsbJqn8JMWQ3/Fq\nmqkLmqObJ9eHTUk5tLanFNAJmzxR1iiIQxX8flYpwpbpxNUrtrd33h15p9Ww\nSqSV\r\n=cGX3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:brandingbrand-fsengage-2.0.1-alpha.33.tgz","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"e1f36547a117a248171e48ccd4b07a4f7f083fcc","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_resolved":"","_integrity":"","_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.15.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"2.0.1-alpha.33+e1f3654","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"2.0.1-alpha.33+e1f3654","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_2.0.1-alpha.33_1547750078262_0.30602371570515063","host":"s3://npm-registry-packages"}},"2.0.1-alpha.34":{"name":"@brandingbrand/fsengage","version":"2.0.1-alpha.34","license":"MIT","_id":"@brandingbrand/fsengage@2.0.1-alpha.34","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"75e909ba5b62a787e97c777c3e7020b630abdbb0","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-2.0.1-alpha.34.tgz","fileCount":161,"integrity":"sha512-4SgTPmDbcSIBLKEkWsXmBwmzn9ONGhVrDe/ApzQam+PnjFJuqE3q4IzzmCRA5dDHWT0p44Q7NU8/iC09Lr/F2Q==","signatures":[{"sig":"MEQCIGE9oPpSrsIOTwDFn0KqBvu0LdUxNMYfT3D7urRAS/hfAiBYsaoE4Rk7DPOyvxWDm1ghDcHwI7TH5gWoZO30O5j/gA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":350638,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcQgBBCRA9TVsSAnZWagAAzWgP/iDbTVDD4fmAFBlHuvCF\nfSmDzp86VNc3XNg+eR8qGWRWmYAkrsRJcAvlfTR40v1iIoJ7xtDLwfyNYmSR\n9TNhyOzUacABqTVPH5xfuvEEgqOWX9wrBHw1mjWoShKqv39RT3Sli2UGIv88\nGbGejq6+LxOHptVf5IbQbDLjBHMyVNCzQ7ISstK79Pu1qP5yskvNUjK/+wVn\nVh54fMjSufDZ6/lWjn8/FnxA3ozpMOyJPfH57huAcYzjqenOBZUagO9fiF0u\nv1TC8tuE3IbgH3Za23SukdQQkVbH+hy0fxoik5bWSgel1ZcQeQ++pjiXquBS\nxey61FcGEXHRB5Dc9rCeUN2DjSzWBYUI7kGBBZX99m6sCcvRIFQOgsf4jQvT\nHPEDkU7CqnKfCr5xp3WbBHrLfO9eY+1/bonf7hNMSB8WI80/q/MuW6zotX8t\nZdUon7ZKg19p4ENOgPOTyoGPk4Eh1rAUtjig6QIpOJSEKbjSqQSDvfizp8ZR\nfe0laKTkK+GZn75fqFQIvkuQwGBha0+4VUFE5w9cR5f0zbC2NYdkq6YQ6SG9\nlWs8YnCT65T/NNnrkSgomNConmQQ4CZlYH0FNdB/M+jqyxqtWAXeaoifKbVS\n5UH6ls59ZlJ/NOlhLkJuxv/sFXBMLv/p7u88ZB2O3rFzFMRVjDdeULmGMUjA\neG5X\r\n=yNv0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:brandingbrand-fsengage-2.0.1-alpha.34.tgz","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"89c62d37f1eb914c5bc90e0c81433637503820cc","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_resolved":"","_integrity":"","_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.15.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"2.0.1-alpha.34+89c62d3","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"2.0.1-alpha.34+89c62d3","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_2.0.1-alpha.34_1547829313199_0.9898373742671274","host":"s3://npm-registry-packages"}},"2.0.1-alpha.35":{"name":"@brandingbrand/fsengage","version":"2.0.1-alpha.35","license":"MIT","_id":"@brandingbrand/fsengage@2.0.1-alpha.35","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"c3cec0d4d6a051e57ce6028a7b0520f9e32b9b9e","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-2.0.1-alpha.35.tgz","fileCount":161,"integrity":"sha512-a1z6LTYDnCcByQFb2Yl/nHMeRz6cf0DTqHoCowx3GZ66qu8/nDLbkNG912Xz51ZYisqEs5jDt3s5QVhciyFijQ==","signatures":[{"sig":"MEUCIAPZs0mON/nXGQe/qLeqMk2jr/5G6bpnqtgPTRVANKxTAiEAmuCytSb0YCbxLDXxUjC0f74l6XpQXixc7apzP4nvjTk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":350638,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcTzffCRA9TVsSAnZWagAAOVsQAJmqNCKjfwTmbf5sV4a/\npk39lEhYIe5kqaLRrSMSCauCxYmTByvMwHMmaCnPyBcuUfHHASp476ywvjFb\n34HL5lg26Oj5YVkrz32vyrHdYt7hwX4fcfnIEJgG3CS35rFeO0VJaBrgCzvu\nI0kbIc4/fmSNoLDXHx8J7APCJFmPd9i8fdiJKyqpU6v4G6hs39qRNc5SEgbT\neeo0dDepftGqwfblTNnsc9B66spfe6Kucw1yKX/hi6v3QVpXjBqyOmfMEn8P\nmbDc0IPquSYoE2RdZvguP8B4ajpyxJflGSsqjjA7U8iI9yGUz5QyRurlNwRT\nNtTGLdwsQbluOdrIEEjxfo7jO5kNqqcV2SEZ4SjDUNy4pSN163IesEU0z73g\nz6SmbRDZSGmPQiWGRjpKVtMyHYpuiL9WRi31kLVb4Hay95GDqn2bkliBYuMF\nFlqrkHpNfKXTWMwYLTui5HQ8QrQbIrQeoGUDZMqfMepqEWGiKAhs7VAJSHF1\nNimOunVwXfco7GCW4GZ2oD9PrNNuA+KaLO/QEj8JetarynXUvr6CUkgNFb6+\ncbfk/X+/dyZB7TGfz9+NFVqQD583p2wH+edQqtQBMoCnMwiCx9Lcc2DJ0yT0\nbdfb1ATk+jc75snD2twNu+6RMScwTFFqTuEAqgtRMdrAqv+C8/7NCb9+BAJI\nyFGf\r\n=VAaB\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:brandingbrand-fsengage-2.0.1-alpha.35.tgz","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"fe727e8afc6e42c259abe5adaacbcb5a21bcbca6","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_resolved":"","_integrity":"","_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.15.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"2.0.1-alpha.35+fe727e8","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"2.0.1-alpha.35+fe727e8","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_2.0.1-alpha.35_1548695518806_0.3485257924395937","host":"s3://npm-registry-packages"}},"2.0.1-alpha.36":{"name":"@brandingbrand/fsengage","version":"2.0.1-alpha.36","license":"MIT","_id":"@brandingbrand/fsengage@2.0.1-alpha.36","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"davechekan","email":"dave@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"656db635dcc8de7925c222b1f09269b0d6adc22e","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-2.0.1-alpha.36.tgz","fileCount":161,"integrity":"sha512-n1FMCAC6kk/d50gUz6eBym18kpRj/q92Xgbu07xshF6xIEeCEKUQiLp5GTXu3Jf+mxlDAXBf2MKrBoLmcoLqVQ==","signatures":[{"sig":"MEUCIQCVYOdaQWMY2kHufh0WSzyk2X2oSIKaT3tKHO+naeAU4AIgOTllOuef6g+OkcZmkqSsFlIQbJwztwEBHlJkNvlzeZg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":351480,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcT3RqCRA9TVsSAnZWagAAnggP/1AgHyUyi81zryhQbDTY\nITTo0QdLfzcXDBd/JltyB0jFOqf7FlLESKzj+GOjXAYW6GfiXGUOCc4Tf6iX\nud3fjURxYDMyjqGSXv7KVhX+ka+N0/jCveSAT/b2S70JnN9DuzDfIGl8MX44\nLkLokycpQoi+h1cU7Gk9qqnFThGgMclx/gU9XcXvkiMFysQh9xH5j1raNSpO\nZga4RLCZ5wAEODlELSPbFGJDUBsNOQFyhRw+Q4knlOHKTCpSHYBRu4PTwEpO\nitYFc1oc4jDWD4c9558zTKZ+b5jf3eKhZY9IlpGAFDP7HWLL0daib7kzl4Y8\nEWNDe30dKXp2yPUj/MUR6wPpzOktDPJZ8ecrdWVlMtEzb9g+DIW30sq9U4G3\nQQdEwH0iWdd/4ZFWtqyvQwInUR14xAUbNC7TRtHDN4Vo3t9OmV1f14Pyh/TK\n8u0XQ28UnegPQWR21fHhS6KX/S3Nj2/AIsGk+mltmv9k54C30x6lfwOoydRZ\nbhLAhVMmVI5JJPlNqbKoeRuv0CuUKIDPXTfCYiTNlOix2LOW9hotRhzPZkjm\nc6zgA1jJxF1hzAl1YH+tc/1KL1H/JQNVmlIeOTpzcFffnHmeAZvs8gEOsRst\nRpqkm9qq8oK6LCUSkAO603HEUmlcN51nXtfV0+X3n5ydwHZv4llcIPV9VCJ7\niCLy\r\n=Fn+y\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:brandingbrand-fsengage-2.0.1-alpha.36.tgz","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"9e4371bd539465c7ddf4e4167f765d66544bd70f","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_resolved":"","_integrity":"","_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.15.0","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"2.0.1-alpha.36+9e4371b","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"2.0.1-alpha.36+9e4371b","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_2.0.1-alpha.36_1548711017057_0.8038759077170532","host":"s3://npm-registry-packages"}},"2.0.1-alpha.37":{"name":"@brandingbrand/fsengage","version":"2.0.1-alpha.37","license":"MIT","_id":"@brandingbrand/fsengage@2.0.1-alpha.37","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"6974a77aafaf3e3d421748a6e91b51248279541b","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-2.0.1-alpha.37.tgz","fileCount":161,"integrity":"sha512-5sYJjwGBsDsYK5uMnEabed5f3Xnrx7xGBdbEXXsFCb+VvsweswLzWhFajaGVStF/bKP9wR1SUf95Vh4KBYmbKA==","signatures":[{"sig":"MEYCIQDCtkgwVWIHe0zK3ijuAjvGOTk7/hhoWxrsleW7CnOk2AIhAJYlcgC+NtK+qtThYA48SWk7RealSevhHpS7YFmsN8vL","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":351480,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcVHm5CRA9TVsSAnZWagAAYG8P/Rxy+21lkTAWP9II49PR\ndaCA4Oh5YJDE1oniVUi4yDRmjscyt/dzoZKt1XBSdiJgwGao9Kqfp/2o6Sj8\nQ/ne2taza2878cz6w368gXAfC7+PLQ9EFplt9o8pidnV1EtQl3jftxaGluqp\nIVMCkNX2MYU9RFnOGBflnZgIZVQQ5wcBnYEIaKpp5D0hEwJWPmKp4yS856sO\nK17NwKgVOFvblVVEVtxDrALGqMiyPRK/MEuLup0huII+LBahWEq4VYFwQi9N\nmZGj0kJsDX6gIYYI+lfaduJ2MSA1Tk5H1gdbeN+Rn+wlO/2i+DQG0S++To+r\nbHi6OkgZgmNCS7Mhx96d4KNAJTjT/vDttEXXMfvNgxKV4zec5YNvazQITWPs\naUquily7LgZ9QzmWdPYCzBv0AVQolk/Woz1R8XexbhWAIn9CzS3PIfRlSK5F\nz+8vs0e28ub9UN7/KJpMoHUV+uShfBZfp/E4iqDpVb4WGXiFfKOquzVt+cBN\nLBKUEoSCJPss7zOPghcNBDjfjwa1ouH3R0oftILCSY7es7D1n5y+p0MtkI+d\n40KRl8KUbfrfseLoX7kKNBzZ/KY0rtch/bZ1tZPZgKTZ/Bhuh3fBNyeTUz9F\nD6w7PL6pLV82gmvccEvLW8FiFZQvfihcqgirXFRJZBSFTy49v1AiRq/RjX+7\n9puc\r\n=QcTO\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:brandingbrand-fsengage-2.0.1-alpha.37.tgz","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"ced8b2f01a8577746b752557ec65e0fc41f4890c","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_resolved":"","_integrity":"","_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.15.1","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"2.0.1-alpha.37+ced8b2f","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"2.0.1-alpha.37+ced8b2f","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_2.0.1-alpha.37_1549040056475_0.42876545190926185","host":"s3://npm-registry-packages"}},"2.0.1-alpha.38":{"name":"@brandingbrand/fsengage","version":"2.0.1-alpha.38","license":"MIT","_id":"@brandingbrand/fsengage@2.0.1-alpha.38","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"30ab262c73922d896abf3f5637b28b1708211d79","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-2.0.1-alpha.38.tgz","fileCount":161,"integrity":"sha512-p5uIBxEUhTWeCi/FcfklzQc+e2n5nYLRDgKMURVjiyHroF/LOnGwYTSR7Qxet2ZPnI9/dwiR38sXdpxrA6rfZA==","signatures":[{"sig":"MEUCIG/42dFPaVWYkHGoCi0UA1flNfFHKHRpB3D6JGROd746AiEA49pbg6auuOXY7ti4uLlNqzxgb5P81td2AMo1sy9dKGw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":351480,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcVL9cCRA9TVsSAnZWagAATrAP/jsGDZ1khPywloFiJtM3\nc776eNdEmbY619QRZBp0z9+dkhKYuX/NG27Ex8iJEUtzbNibE+7bzUTGYL4K\n5OqN6dx3cM02tolBpNn2lN3k41AJrTGq926m9cnXNg7tB0qi8ArGHlWUy4E5\niK0SKSu+7lCVL8Vqymxy/VIvfSIlwrhr/pX3JNrv16abqwjSEA0H91QHbVNa\nM3jdZkJOdEp9T0RJhH1Z67IpoxPxMkMT1V97UM391oCG1SBBjfCO7ExL3cxR\noE14SEFcMT4epOF0MaagWVfXzByDAAS/R/QXxiRHEgP78gAvBinjTC31JKYK\npfX84CxhoNpSDv7UBKRSWrpzHzo5L92dldK9+DNHJkuWT9zT3cO23pWNBPHT\nTTjpty5cbt+IX6rOvYc6xgvnnwCiu0LAEa+SaweTUv6XJSzfVEX0ztZxcYuO\nuhguNpZ2eKCMj6oZuhB8uC7maRUJ7iNEVsmISzdC6L1jRKo+sJrmG36JWyjA\n7voWUDvU2WWfFm5xaNisAFjuBL6C0C5Er9rrGvUSB0CP245yzXrKwYbZ4Px1\nBFaGHOtP9Cr5TmFzmOz5/gUkJX2jcf4HMHhr4b+8pLMlxFKSlUjaZ1lnJV1N\n4AdNzr6ruqv+w7rEO+6G55p3GDH/KXBTZlD2cvFUw4AHkgY9sdTvo9Z8FOir\nLLHI\r\n=NY+j\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:brandingbrand-fsengage-2.0.1-alpha.38.tgz","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"7a48cd3cabaff498fcc3a5944748648c1b27ab7a","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_resolved":"","_integrity":"","_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.15.1","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"2.0.1-alpha.38+7a48cd3","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"2.0.1-alpha.38+7a48cd3","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_2.0.1-alpha.38_1549057884105_0.30716698754330185","host":"s3://npm-registry-packages"}},"2.0.1-alpha.39":{"name":"@brandingbrand/fsengage","version":"2.0.1-alpha.39","license":"MIT","_id":"@brandingbrand/fsengage@2.0.1-alpha.39","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"2f4507d1a7b4a239d2e37d916f31e3e63f1d044f","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-2.0.1-alpha.39.tgz","fileCount":161,"integrity":"sha512-LdAV2fWVG/rdjBO+yyLmZVz3bSRrsNAaH7jxpwSS8gsemWtmZsuTHWCMVHOyKpogPBJM1DPNB3GG4FDebXic2A==","signatures":[{"sig":"MEYCIQCHik0y3jF5znrU5dlNr+7UbPHzGY+bWoNKjBoJnsmo3AIhALVzvsqHXVpSDohACIWzD0RQ96DJvvSsHBjkV0X/ktuN","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":351480,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcXISqCRA9TVsSAnZWagAAgXUP/3b1Ip4JTKNiaNtnLBbw\nZKRTipsYLNHQV3eDxDhAIVoYv46bPbQHLP5aRA4QSJtwZqaKuKvTN0KRPnRG\nXtowTAf3/Mdun6rwBBtEEi2aYPJFqRQfUwfDymhQYBT8Dm5Yi8bxme9hAGBj\nuJx6px2yEvvEh/sxCWa+pCCCLN9VzBV0mjG7yLAtb43pIIBTQdZQdLRo8V3e\ntl6NT7rl8LJyWFO3pbIfy/lV+8VpcvcGnCnaC4kjzPr8gATePbQu33G7cKpw\n1Z0Plv74ZR14kOoWMYEuca0ScdZJDBtkU6PMcu9S8YaQA1wITeCRBaig99ob\nssyVZTrsEB1HY0Iz6ZkyOV0kAK500lDNkgLpD0R3+0MvkrEJKWcgNbamccCY\n3jiYZvNF1j/rtzs7uDz6BRqijLv3zT3unNBOj8vPLoVo7ubxWT+RfYzP4Nm9\nwRxw0EzEaoaOxHVX7z6v6KOsDs8x6CvwEukGE9ka66ZPND9dlcluOwmQfV+q\nvtKe8ot9vJzC4QR8nJQYlluUtyodqaOV7fyDrkWz2g82lotjVpuJh+WJ0qAe\nQBeD/4/fd2vpJDYxKY/Pp8s4hxbdmM150mi7XVKqbim95jfCJGbkNw+9iUuk\nScO6cRckuhbigwjp8ObdXPVGkEUHmv4RjHin3tYuJCvw/vwf3oVLZNWHYsds\nrpXA\r\n=6ZZh\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:brandingbrand-fsengage-2.0.1-alpha.39.tgz","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"fcf91a63ff6a8a0993a8f0a1ad1c7c65d4f38a84","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_resolved":"","_integrity":"","_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.15.1","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"2.0.1-alpha.39+fcf91a6","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"2.0.1-alpha.39+fcf91a6","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_2.0.1-alpha.39_1549567146061_0.08947403565438483","host":"s3://npm-registry-packages"}},"2.0.1-alpha.40":{"name":"@brandingbrand/fsengage","version":"2.0.1-alpha.40","license":"MIT","_id":"@brandingbrand/fsengage@2.0.1-alpha.40","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"e194a70fdbb3de5aa91a98d29183f17d0e02545b","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-2.0.1-alpha.40.tgz","fileCount":161,"integrity":"sha512-PvPnRur76ZM6f8vqrr6DXe24YIPYHigncOEfpob3zvcWNJNo/5NQ8MXvdtDNgNcNDRayQmgn+8vdH0wvxjDjRA==","signatures":[{"sig":"MEUCIF2ft8DoMRTImioTaP917cr8rXhA5TGDBIEP6TFcWc7aAiEA+01ARTHoWl8rSPpFNALoe5rIkLfccm2Rm+hLO3va9mM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":351480,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcXLppCRA9TVsSAnZWagAAGtAP/iyw+/GKB4PrAslzIbTN\nKKAN9IEQ6jcW3pJK4G64ox5tHzR6JqkbxAdZ3akazojLVPtc847e3gfdvVNI\n7M5S/KoN5IUvkNoU5RslYiVYHoYWkBBTK3+2PMjLL33oScEwFrMNO7RF3g1J\n/dNhj8lFwys3IhaJ0RFlR8/uheIZfDJvqFza/m6JrNNcyDi44ar4Up8Gvki4\nmqgLxZ1+eZsAwNmLxIwY24Zw2vOAn/4q8aBQZDSFpmpmVMAPCf+lwAH2udFM\n/m3liLhvuS/Zq2p5OmsCI8omw6gW3mkGoMZIh+dBJDNtXhNncI+1ej2ijchD\n9tb6vNG2wcalEk0hu7HtGWnW8dLBH/zL7x00S3+xxDXG3NYnERYbYsbFYz+7\nU08LxoHKYzVvZBwtKRKiM0WGC8lXVD3eAVEcZ1ApDggewrd+zLj9iG3FsOVa\nwbck5TFPFdM7iitLxnB2baH9sFvL9ehZlnVriVwZ1rAgIwxcYYEO6fXUGbg9\nOc0sDpJHgYFSgGv12/CI1/diaVHU3uPv2hd4DoDddqwjJO17GQ6Djy9UiMlH\np94nKOTSBDOwLNhFeJxPZWcbNwWWbE9933lAazgcMBW6QCUQn59KLX9J+LSL\nBZszRy3z9bCkZYX5qllFk8YIi8iuRaQjyfkjHQngJOjRvmdHvjBsqtPCkrUv\n6hdK\r\n=yC/r\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:brandingbrand-fsengage-2.0.1-alpha.40.tgz","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"e2bbd7f85931cce3f71fe72017c4e15562e963ba","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_resolved":"","_integrity":"","_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.15.1","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"2.0.1-alpha.40+e2bbd7f","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"2.0.1-alpha.40+e2bbd7f","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_2.0.1-alpha.40_1549580904448_0.1756298485267347","host":"s3://npm-registry-packages"}},"3.0.1-alpha.1":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.1","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.1","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"9c4300882f079faa7d7d220a3acc641631316395","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.1.tgz","fileCount":162,"integrity":"sha512-aBxOQ5YIC/sOXu+tX8jQ+O52fNnFs8nbQNvTBxLM8aF/AE2PEWZyyXxE2C/d0gAJH1Wpn6jJbQEmBw2XqGTF9Q==","signatures":[{"sig":"MEUCIApVuPQxdkadJ62oEV1wdrrogIP/AEzW5hmUyIrrBLzcAiEAwUt81/Se7OqI5BeSqBpLN/dVieerGqwbX6lBg1YeG64=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":353153,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcYdR6CRA9TVsSAnZWagAA0VcP/2tnD00M8qGRL79jUwfu\nMRQLu7OYyFd1Aoo47dDuQNiIUQqe0fdVxgjv6obIJD+QLXDvMuw9xJugvlF+\nt/Q0HDewyrGZ0y0LqF99+krKlKdCnZintx2dBL9yeqPcSOCX5i3pcikuCZoK\nLbs5ZSskcsrxdadm6R1jR6M17AoqQtc4YnvK3eR6i+KLOnbDO4dlEDFPsJnt\nmYysIMAM5XhyomQTECsKhwNiwTPUchtYkF9E8R+Yfdud2xEzePVonHaluYKu\nuHyRAg6g1h6rMr8oMlIK61XafxA+xyP7JlifJIRddxIBZvpC1ut5YrDcxcyB\nvuBrVQjzAddyrwwhdoC+gy/338piS4Ix9nAwBHyILUklABdnV7uzR2usseX2\ngcaXLzfNy0g4Y+0yF87jSsrj7t7UWSot4HpHw69Kjc+PbX1oYNKohiUAkcis\nnmNsH6PRx9MnbqRuYQSg4y4mgdrwza4uFj3QMmd1iI/ozkyEnnIaZ60a2sDR\nylHgov50JWFMHvG0fQ5OAyA2/B41iO9iPswcdG+PayuHqNbzZsfDX+dVZPjz\nE9lKX7LyQS4ue3PtnZLw8hAtJcF8mt+l7Yvily9biXYr8EsmYD9zMf6Sz5N/\nZY1xnDTHt6eieQBfmnPwCbFMJaCiecgnsrVDgXD+gbrQG6FfGlmWU5YM43jb\nDn3e\r\n=AXqM\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"c479cebe465a72b9aff2336b2a907631e4f37ac3","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.10.7/node@v8.11.3+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"8.11.3","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.1+c479ceb","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.1+c479ceb","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.1_1549915257446_0.10571764601817146","host":"s3://npm-registry-packages"}},"2.0.1-alpha.41":{"name":"@brandingbrand/fsengage","version":"2.0.1-alpha.41","license":"MIT","_id":"@brandingbrand/fsengage@2.0.1-alpha.41","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"59873e20b00cda78a143de1f1633790a453e5e52","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-2.0.1-alpha.41.tgz","fileCount":161,"integrity":"sha512-wQwPh8H6Dj9mxXLwRly6v5PJ1Xk5Za+WTyRX9lR6GbQjFCF87anHvGSa1IUIkIYNOqV2yl57KLJ0WsPGB7oOCg==","signatures":[{"sig":"MEYCIQD45Pji+I8wdGYx0JaW+JFekDOrLKuyrIYkKAjfMXlpcAIhANCTvR5YNiNACL8GfUdBihLQ0aw2mQoelocar/3pRh1W","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":351480,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcYeztCRA9TVsSAnZWagAA8nAP/01OTABhtHQqZivpxrdP\ncjask9C96nEE4MnaXoEPcJgW9mCBB1eTE5UDKuS2PXDMaEAnp0FmAA35UrMj\n6G94AZ32lqFUP1bKUmIAUZjMwVV9eM4+RDV6aQQHd2CpYNoGWOMLCI+UHdv9\nkhjeE1AhHjplvrsyiyfoJFBtl/bvySXz9RRcBnAXaQRx6xlpgIC7vLv3QM9V\nYEFM/aK/V5IHjQlSeHTyt4RChHGEFXnztD3i6tE0tWfpM0y6V35C3xuI3a4G\nF1KmKTNYwdb3DNMDfvaqBOtfiRB2JomWL3umSV6ENVX4ifUbvHKq4daaDh0C\nO9Q+9p24q9O0kopUQ/3HpEEf7mAuNK5jLEPxk67ItjhSHXodNlQWqON1C+2g\nzerw4MPbJeTE+IRo100wWht1Fo90182tS8MREw4ptBHIA5pGmzDXadkHSUXx\naxyPv/mQusStfg2ctTQQiPnQoD3lLRUjAv9c/DC7ymEHmHMIcVWJP7/OqUX4\nKbzXFJoGzd4o/zSEjN7q3mM+sl6KBFK2JUCS/t4U+cGSWad/jPc25DTppaCo\nNNLjNQgGgp7yQldaoD/yGj3L7fJ4ptb3x4E7qNf4jK3zCch7a/Nv+4w7ZksG\nYQbZ6YunOQ7LHpVTAXmCAqANtW1Z0q7iQ53x+RqPyHieXnwUFQWzvFjm48PF\nfIX/\r\n=6qJk\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:brandingbrand-fsengage-2.0.1-alpha.41.tgz","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"aa134e8935622fb1df8a5af03aac1de841e9de48","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_resolved":"","_integrity":"","_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.15.1","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"2.0.1-alpha.41+aa134e8","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"2.0.1-alpha.41+aa134e8","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_2.0.1-alpha.41_1549921516819_0.5200675363440617","host":"s3://npm-registry-packages"}},"2.0.1-alpha.42":{"name":"@brandingbrand/fsengage","version":"2.0.1-alpha.42","license":"MIT","_id":"@brandingbrand/fsengage@2.0.1-alpha.42","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"4e6dd93c171636460df52c83c0cc8870a1b57001","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-2.0.1-alpha.42.tgz","fileCount":161,"integrity":"sha512-qIcVm8AZab6qhhlTjpXpCmrMvnJRNlokD6ZwV+hfZ9InQQVmdSn1AhfBRq1ua3xVfGwbkGvAz89TaeyodfjGNA==","signatures":[{"sig":"MEUCIAmTgno34qQ7AuFLqacEAzjVzNDZZ3AlK1S8IYWiszwjAiEAx2S5GOEBcxfRzv7WAzle7KHwoec0YAMFvhvTbZCtkmc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":351480,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcYe9DCRA9TVsSAnZWagAACzEQAJ1StgrEhQAWRPLbSK8P\nkmTXmqzEvfbaNlD/dykvZsimD3wF+/1CrHK1YkNv0WqzOB77EZk99bRglSEM\nTOOOC8cUnsG4cF3/0J7aE1Z53wo8naxX61GiEhiki7pxadAOeFYLuwzARMOj\nE2G9z6JYV9IhZxVikKvXpO5X5ZPd+Ks3TJUVo8ajMYxiIR2rMBW2ay/u98QK\ni8Ny+UtkgRhLIJzcPqhVNswT9TEYiqE9K96N/+2q2SgM7J3zmuYlvefHuxBX\n/2fhnbjy8mqcxMkS4FV0wvLQaKwcBC3EySsJmVdMpEmpS12U7bHvGA1WcCEA\nLoWKc+VjnShvZAb+uWbXkVkbgOvaHeLhAWg3X60B23oxSDLZ87mM9jI7ZtHn\nhFxTQIoEBrIes0EMiB52KMhzQUHzxOdS00Vlvq6gCpR8YhwrtDoSLnvokfbD\ndDbEndSZSYH1rABzhJxKxOvmQ6q1VYz2bpVKvSRK1RUuzL+dA1GeckPelQYp\neWnibHALDG+rJ5iyOsxT+AwAvajTVySHIVQkoq2nZjBquPc2xWMHKJhsO5Rz\nlDAVhIsYyIkE6gHX17jeC49qnj3GPdfygJNWMwbk854a4CCTzpUKpkqqbf3I\nR2We/01fm7on59lvWEnmnWUjsRN4Iv/eqnU6zb/unOIJ/AxhUFNRoEIxpYTI\nvWNV\r\n=4Zp7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:brandingbrand-fsengage-2.0.1-alpha.42.tgz","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"0b9cef97c6e0c833c04322da44467568c4334095","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_resolved":"","_integrity":"","_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.15.1","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"2.0.1-alpha.42+0b9cef9","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"2.0.1-alpha.42+0b9cef9","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_2.0.1-alpha.42_1549922114675_0.12614240963552925","host":"s3://npm-registry-packages"}},"2.0.1-alpha.44":{"name":"@brandingbrand/fsengage","version":"2.0.1-alpha.44","license":"MIT","_id":"@brandingbrand/fsengage@2.0.1-alpha.44","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"5bb59639e09f272aec8bfd9ee849bc4a899ab3f2","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-2.0.1-alpha.44.tgz","fileCount":161,"integrity":"sha512-NVkheyMK60FSuPU+oBW2qYIQoxV61DSThnPs5LH/MuTirK5EgJF4/7T2gnhvDa1eCfUUCLbN3J0Udl5oNHP5Ug==","signatures":[{"sig":"MEUCIQCs+knmAnl2v/ZbijaJGJ69gQ5LL3gyv4/WlTlhcSFGsQIgBD1VBFcAn6mLNo76e/HwTcyE+860Eb/JvISLc1w4wng=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":351480,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcYfRsCRA9TVsSAnZWagAAES8P/3E5blkbAoD0776FYZ67\nIhDHJB5A8bSH52asjPCUwHNnhhgeP7uILM/Bhpsh8BnlwIWRINZ5SIsZlM7c\nyHbUSE+EOc3aNqS8d8zClgthmXvN/4z05FyNKFSyX8t9/2mV7tT6Dc/7B3iz\nnBKGiTZSKjH0We9HKzAVBs5T8CPO/oTIGXPUwL/E4u9S8olg1aSLBHcLeG+N\nU3xfQiMxXr7IIIxZ8paIBU/+DXmRAKzaIJorLuGuuyg1DziBowZ8KJW4Gl+W\nsnt5r2ddlfxzNOREIcEPvzRpig+j84If4IPw/QZ2mSUQHuGRuzsIAVYGd3RO\nLmt931/bWBMaAieEIKRbEOMCeeyK8FVFiygEKl87XmlkANbjgZSaQvMnAkHK\nXm4R3t703PDObdMhPn+jlxL0tFPbNjyX0qjNBv9NpQ4SKJppbVJB6hn9Chnk\n3EzwfeZu1/tBLZgsJg5QGG6lNnYv6qELzBZDKkFI3Eot0InzqWsLCSg6Q/aZ\nXWp3BdYQCCebK3biml0dWNXt+1jX+urRZcWUg7Xmxi+HHhPCvinc1JSRQpj4\nXyD1iLfhaZvA8GjdKGJVtzICDtujXV/kKV+G4Ud5HMZVtzJqmPz76Tt8OQZU\nwnOyOE6funfXPzfoCKHMPfXmY8u8AYHAvT9CrHc2Gu1c+9RM7YhY6n+dOmpn\nZP9g\r\n=0XMb\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:brandingbrand-fsengage-2.0.1-alpha.44.tgz","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"7bf0e9de2842313b51ad78649ad486262b82833b","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_resolved":"","_integrity":"","_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.15.1","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"2.0.1-alpha.44+7bf0e9d","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"2.0.1-alpha.44+7bf0e9d","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_2.0.1-alpha.44_1549923434903_0.3330765866815444","host":"s3://npm-registry-packages"}},"2.0.1-alpha.45":{"name":"@brandingbrand/fsengage","version":"2.0.1-alpha.45","license":"MIT","_id":"@brandingbrand/fsengage@2.0.1-alpha.45","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"b15e3ad52e9ceb58deb3d24d6a7d991fc8f0dd23","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-2.0.1-alpha.45.tgz","fileCount":161,"integrity":"sha512-pRFWSVnvBOMpAZruvgre56hrsfBOD2XRQ3c31CO14kP5kdHlOFUSoS9XYwdIKuP+DcXPD4DnT8BIergT5MuFBQ==","signatures":[{"sig":"MEUCIQCzQy9LOzqYpPpK1LKzd0MONN04pKm3YvCn5YMpHd0QAwIgUL7UOsRATNC8lL3z8WYJhZ9iALHyP2+4EkyaJdNqCvY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":351480,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcYgZxCRA9TVsSAnZWagAAsy4P/j4qJ14bkeaoK3x4492q\nl3+RPmZb3Po5N+kvVIw/kSj4pRiwDxOskPbEPhP20D0e/j4M5UjU8/tkhNt/\nCicybUwFMFrwhgbMe0l0T4bz8bfKIdqhBzGI/v5hhBWyYrf32pFko1wNIVgd\n/EFLr0DF3jnFJRX/B/tLKWlxoKymejs0Zh0gdGAKz9gkRuip1Ot4+yTAHEnx\nK5XyvWSnqHj3ZBGXKi/+6H75rn+8nWOZ28stW58G5wxa57TerefJ/rcj3c0h\nLUubr/4v5Q+/JVhaKSbK/bpJ9IbMD1OpnHjNKUzQ6poSTPJ1i2WBhaGG1xDR\nlM8Xb0S221oh+rgb9SyxwA3UC1NtmLbwT/NmFS6ERyUOqLF/m5pjKODskabX\nd9uKqXQZmkKKOz6eXCedGoshC/OWAATN0YOYrSJ/FFGztQHxS6PftFeTEPdj\n2NhwAOx+Mr7aizPcZ4HjE/2K6t5muM4BMdclaZnx0oT71DG3TLc18rJ2cEM6\n10zPPcKUfefTlgAfKVGRJSy4y53po1Oq4VifV2ZbDYVh1JuFA9hxOksIRMKG\n4rbT7vPVq6p0j4XN1f1kSmFFUf/usiAPHKtugW/70ZJl5WOG6EZX6f6qvDGJ\nBWUTEfLc3fflSneEhmAlhvVenUCwiTvXkYtAbbtFVDLHg0oI0mU4PMhCPMhz\n3gVd\r\n=Ci5G\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:brandingbrand-fsengage-2.0.1-alpha.45.tgz","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"9fd535706bc13e147772ff927ef3f410481e4fa2","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_resolved":"","_integrity":"","_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.15.1","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"2.0.1-alpha.45+9fd5357","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"2.0.1-alpha.45+9fd5357","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_2.0.1-alpha.45_1549928048133_0.27236738352353895","host":"s3://npm-registry-packages"}},"2.0.1-alpha.46":{"name":"@brandingbrand/fsengage","version":"2.0.1-alpha.46","license":"MIT","_id":"@brandingbrand/fsengage@2.0.1-alpha.46","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"e9ce6975b0988d3e6330bcf89e98ab9a138f54d2","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-2.0.1-alpha.46.tgz","fileCount":161,"integrity":"sha512-F/Vy3NtMkRY2MP101cnysVcCMkphE1TYl4Al9CVriTtfp8QNtgvMygn9RDYPV+hPj4+/iwFvydiH50IobuOPVw==","signatures":[{"sig":"MEQCIETohDWn+oc/TnT5n55hAI5KDktoGXkPQoir3FwKNItNAiAsXIOzwJbWM/Ovv75SpNQbX4uaN6aHs7ykhEMsAbvOdA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":351480,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcYut8CRA9TVsSAnZWagAA+HgP/jOMuYHJ4BbR4alJcXp0\noeN0q5BbY15w4r+vcPz/VNT7ybad+gBp6kvQoZiI0QxLx0X7oXSvyE8/cijR\nfCyfysDNVZQUUondKaV1TG7YRk+tXL2nJgfWwFQbuvNqmy9Kgo8ZtyVhVtup\n+5PgzzhA4rC5HkbOLKLVgicrrtqLZdn+Rr7ceVCHJFkTMlh/DGMwY+5wZwnK\nHLspG8Uj2m8E29ealeVtIQmWtvy0rTHm/9g/Mxwa/PhvuFRmmEOmFoZdWvRH\nBUbY/GpqZsvlhNrDCkRVrVz24SfSK902eP7vRx3fUdETwuzMCo6wbBBvjAPA\n3lODR5yjjump9lv1uNM6enEXOf5OlmuuPCNfE3ecBcV4sSt+4uQGQJ58tjAF\nq9wKFYVVbTXDLYYwe+opYw7eEZnlZey2fMWSbs2SJ0foTDcMBqwV4qGkr0nr\noSbiQYs8mapYF/12FDgGMd/xTP5RLlVQsANPy851ExB4rmWwBVviStLqBXw+\noW4oYAP7glTe8IVqOpL5Unmja4RdSTGPxDOki+JW7z8/3XuxOy7AF27iTEZW\nrI4079LWPeRPMXQI7YBrFM0I2uqik1pD88u6OWdLhM1jz54HJBRqzFITiTU8\nbiUQvZXm5VAhxAsAd25FFKHFrINyQerOI6209ML4WGRfW1sAWaaODox616AN\nLoB6\r\n=7tTo\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","_from":"file:brandingbrand-fsengage-2.0.1-alpha.46.tgz","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"165585dcd5aa1e321c91ff46ff14e798508009af","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_resolved":"","_integrity":"","_npmVersion":"6.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.15.1","dependencies":{"react":"^16.3.2","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.55.4","@brandingbrand/fsnetwork":"2.0.1-alpha.46+165585d","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"2.0.1-alpha.46+165585d","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_2.0.1-alpha.46_1549986683450_0.9202174629026263","host":"s3://npm-registry-packages"}},"3.0.1-alpha.13":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.13","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.13","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"941aae8f0fab67a0cf5fa9ce51ded4e6ade1e9c1","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.13.tgz","fileCount":162,"integrity":"sha512-VGH3rBbOykSOOhu+BmsNLt8YE1UDSMGjiSzEHpq00F/P2FqFLbnfe2TZu3XmanaoNIjJU3mfacDbhgE/N+ECdQ==","signatures":[{"sig":"MEUCIQCq8Y43BTccphtfSCVnI2qbzerUZBz2mK6mEWWMyUyjJgIgBFD2x9Se3gmw1hMBO/Wu7PEfkYaQTmPmIxVq/a9U3Wk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":353324,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcbcwUCRA9TVsSAnZWagAAXUQP/1sYVgOQNE0fnEP5VWzR\n9X6uLLj6Opo2j2kawuFJODAsrBkzwiMEjYU+hSZTlxp/7HLWIzUZXlOe27yX\nI/46f+olUHFWSuXEI5/AI/ZsL8OMX0Mo5X0PETJDmJ9mq3pfHUUbx/+tJw8P\nKCvNS1NTCDNiUZTdeJZsdkShMFPR/LLxzjssK2llPqizXZTKBDWHdiHnMLP6\nlZ9zotsDfQzC4PRcoJl/685Y0eGoAgdqLNMpM9gKs1wKf+iJp8el5Eo6mSDN\nR4PRfi4aXWi2C86aUyzz/Ys7DHE2xVAlKFhlWLPWAHw1Ca1rrd6mr56Pbd5F\n5l/eclFvW9EDgBzt79fW8cBxay6FJXrW/9A9vC7YLsSsaeVWtcEnQYXlQ9d0\nEFY0GB2AU5rw6ujVwwunrFXTEt8O7Ok0DaFbXssk1iGY3CRUfhIKm33GCC9g\nwcbuSw10hnUKO64o+VqRrQfcM6HhRgx9laUCNW9U4yEQE1jbpA8m2oZdz31i\nXKVhlOXpoY8HxOqijLXRDNST61nl+9jxvyVVDV/0qRUdnzXM6XqLp6TyJOcn\naO2IKg3up4yNisp7009/Pmhnc/CPzVkbYY4DMkCaPTz6DHrF3/iP0Sm5B6X+\nnjQq/Xr59QyyP25TXlGi6L4TO/A8VbKZvr+4uzJ6KOAuuNTgALWrTNty9m/e\nsxRH\r\n=ZU+J\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"e688e57b7f20be2c37604121989866ab4a9eca6a","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.10.7/node@v8.15.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"8.15.0","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.13+e688e57","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.13+e688e57","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.13_1550699540096_0.5136723321964609","host":"s3://npm-registry-packages"}},"3.0.1-alpha.14":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.14","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.14","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"41dcf2cc9e1de84f2137927ada1f067d6fd077e5","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.14.tgz","fileCount":162,"integrity":"sha512-WGJFlOboXt+9utJfe8NtIgY7/sC+ZtHZpXKURDDNKiuigWBCBV3FLcu4FdOqoZfzmdwsPQf8I1h5a0vSRBDbEA==","signatures":[{"sig":"MEUCICe3Il13xbbG+F679dIj67n882/7qd6M/RuWk0ktyqUQAiEAuy19DwgWQw0IGpxAEFIg2UzLqXTjSlValZOuDVPXPRM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":353324,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcbwBaCRA9TVsSAnZWagAAAUUP/2bKhfIUbH9k+JbENYi6\nPuy3q+bwJDU8zaUpYg6D/l+rYqF+xzo5GjtVzCF/wsA48PiDB0gwVrjN7ARq\nxeUkOHBSEsLQoo5HL+BPfV828iP4IglDkQ5knibJEHhZMPO/UbBGib9z2/tg\n+zzB5re6qpAZQS11eQnaokR0PrQVjAoYmZX37JEBNTqn1//tKu52NtgpxmW7\nhzKEjdNIZy9URfs8vRXTsT9KYagSRYDMK/Wb8CyC3MwbKI+/hzG5fEqcbcnV\na2nqe6NYuHrsrlOQO6hz9yn1y8h/47cQaLriGtESl+KSodIaMz9c1h/JJ/tH\nvQyYJtpkK0AgxJUYELCvSJWKuoDlgajNsj/YYZIA9mhoBodvXJycpwQg5UJE\n5uFHUSuu0/Dx5V2RpkJmJneVJMTyT0KrxylMPF7znCSacm1ipuVdYroHRV2J\nUJgfbrl2NdmClHutANIM4sMZ8KWdnRffMO874gp+WVErjyTEfclHvyvoWIsH\nSsYrZH8/zYHYvLwJG9wnJtoh23yBatgLc4c0kHxkbE9J8r35tKReY/bO+zah\n2oEgItpeIi4cpUq+EnW7EtXsvYmw3PAltSK20NNeDXwnokxLc84lf1P28jpk\np62p+hl1kImDlzwQRXQp64TWGsrzJvp7QoCpK5r0FNicd1V1nS7bLZWsEOKT\nD9EZ\r\n=v5l6\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"89845e14a6c77aeb35cdf81186b902462716907d","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.10.7/node@v8.15.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"8.15.0","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.14+89845e1","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.14+89845e1","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.14_1550778457612_0.8418219649133998","host":"s3://npm-registry-packages"}},"3.0.0":{"name":"@brandingbrand/fsengage","version":"3.0.0","license":"MIT","_id":"@brandingbrand/fsengage@3.0.0","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"43953782c31163ce6d31e88ee66108354ccbe411","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.0.tgz","fileCount":162,"integrity":"sha512-UP1YbZ5HJW3NMjy2EWhSWICYZXKFQXCasN01/UGuF2B+6flNcx9GRRsKo6XSUK/3PXMhGegw05VUh+x8T4x5CQ==","signatures":[{"sig":"MEQCIC04OBafqBuIrPbeORujuBGWgEt9wnYzRuQAUwMcmF25AiBjT98QSxmtO8TzCuOqLG5Gyun0Y0ENuaKWRz5VOKVeBQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356367,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJccCWxCRA9TVsSAnZWagAAznQP/3lc1TxAH2DxSzKkSuyN\nIMUNaghM9ysvyvRqvqqfUEV+OIOgHWgUH6s18k6XxgjR5VYf4OxH2q0wONpW\ntHL9Z62pJjGoQAm0wFwsPAmhFaCZopyRRTLhxuKKHWVQ6n7rf70mo3DBIYPc\n4eEHoMMc1UsU0GXZAbumEvKOZQbOBriH+IP+bg/qnCjjviPDj8+ht1KeAEd2\no75kFwEnOVmy6nkk4u8x2tAF7Qt6lMl88kaRbDuFQjO0EM7gpsJ/eFzet+bs\nn6iZqwvsoxAky02TPwQDNzYusmIaaoDXcC4sTKiFiAf+O7rlPWcc13mEjt4Q\nUr8mhWkL19kFaLTJcsSqmsHSG34E3ckJHThC5Ssdap02m07Fxdl20ZgQC3l8\n8ZHkA8WZyGnQKZHdR4JGZOBdV8/rNzu45+/FgQPtguAfBFO/j5d/wmuaPJx7\nSEXtkO+ARlRPfgXUao2LElL0fse/cIYsa8KA3FYmIDIEqK4eeqZvhFTuwrS7\nHOTkJpOrG7CZrPpIJb8jyWMJRXacx7be1HKqbhJcZRxftcuGqS+AhRc+Zw8Q\n+oTyhrPDgjYNo5rDVasym2lPzsRnm7M4+bCXbMNPs6PQr/AKDsaJ+1lpWSHf\n3e8Rnqomitij890mWginIYeP5vo6Ya8g6TaI66Hhfr/FRbUTMsp73gFUc0ih\nOUzp\r\n=maGM\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"2ebd26eed89ec6c0c874d968e78f1335d9eac6d1","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.10.7/node@v8.15.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"8.15.0","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"^3.0.0","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"^3.0.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.0_1550853552774_0.04396135842029181","host":"s3://npm-registry-packages"}},"3.0.1-alpha.2":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.2","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.2","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"12fe9584194e84fe8edf32c79b0db3fb747ca64e","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.2.tgz","fileCount":162,"integrity":"sha512-ZgJKrPFbtEHiZ6gAacQvDjIpm+K9vEM4HrKBEPqIc+41eEvrmsAgZTpDqVjYwkZGrVQaQPzzL2ZNJ/kDA502sA==","signatures":[{"sig":"MEYCIQCamzdOBKrKxTQQFN9t/OuoHmXmUtarUTnh6DlZGNyhtQIhAJ2XkW3vvSAjQRuZwP9x+Kv3d2iVQYUiVBvONEvB+uMq","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356413,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcdrHNCRA9TVsSAnZWagAABX4QAKTQdcXiLhXCgEX/Y/xR\nMmYOw3bl/lOUGbue6yqBXCswQl9wjnMcrd1JHquY/yl45M878M7r/NrIYQGR\nleT2Zpd6RSGd3WRwr3fkVpRkoV1jszsFoWmlq/dowXyxDpn0jSjCST/5za4u\nE9Xr5woocpG2ouVJxl/FLNYt9nTIi4QK9W/IqVVf71XQA1QfNVGGAzSaX7mg\nbBlgnmykDRqFQ4PU68w+nAMiJFwpDkc1lqcwgWfCs7n5H8ztJIoHjfDoKQHx\n0FHEUdtgH1BzaGGVWNNsO5cxCkfENdKmlSRRLnva1S/UjhFqpcCl4Hablxvg\nvlaBNy/03sg9Zt0XJyREOuvzHv8IKbE1rEwd9scIMyahcC5Wxrl7nLKXSCzl\nykFbExhHdULdeig6+kxzar/QKFllwFsdoCSdNTNXJ8CEjVMx7BQQs279WasB\nDwx+YSbHs5K4gOC0sBDbGZ4mWWRJGzC/ih/c+mx5C1xqkOMzYFaJIsDdQzGs\nbV5ezGjwL49nqwSJDwzZ2JAQV2popcyZJuJRyIt3OBgRJM4SQPUWO1Y/WZmr\n3rdNdXc/jGteOZWDQ2G8GrtLU8nR0D+edhZax2HqE4dltDiqNtyrV1HPcubw\nfYsQUq5YwfxFYgZ0Y6YZmA0jn31qRuYLrk6n2Syrx9/xSbbYoDiO+yw0YDtc\nALAf\r\n=uNue\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"c80c1f3a65c90e538ecb37548351d0828ba26f87","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.10.7/node@v10.15.1+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.15.1","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.2+c80c1f3","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.2+c80c1f3","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.2_1551282636278_0.39773908345649045","host":"s3://npm-registry-packages"}},"3.0.1-alpha.3":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.3","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.3","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"262d48a4cb3bb950c7bf1e8055ef59aecebfa6a1","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.3.tgz","fileCount":162,"integrity":"sha512-rHQ8kyvs2ArEIhxHfG2X6G7vKUnc6bwbmzMigFFb9CmKDQYaDzgiYUX+VXvcSG+x0XAplX0SOc+5DzzVtmzkdw==","signatures":[{"sig":"MEQCIGWpyVsMuaG9KEPZJB+oB9r673GdjJRI+H097C4X3p8fAiA9JLC6XG2U0obSkREDXXiW6w9U6krNfiriqFDvVu/rdA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356413,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcdrYwCRA9TVsSAnZWagAA//0QAKFMvEUtbGU3BZaWYQdh\nJBM+xSv1ndDypT8qJ45M6U+tTi1888RTrqrcWX55bYScsa26hehB8u0phdhP\nXEtTzWgxv3JXOGKvswfnr/X7gcMJ5/Z7zIyhyTXfIs2/0wigPWNMXJvox3uC\nlC+/FkSyJ4SajRDvqJlixmqHrQDHIzEYObBZB0PsXBOb5HbpdMb+wZyG6Cqk\nspPAcxaxniAhdslfhto9mLniJk3nCcqJ0NiDaojPoIPhJQ7984kEWNZ68moK\niyxKHHevJbbzB7CDfBHK2REbi5fLI+hZaaoKmcpXCFPG5Snmjbb0sbSJyE7X\ni52uivlN7Fg2yqEWuJ3vZNR7dk1jILh8GJ72y38uenA/KioVeGH3jhf0g/Jz\nhXahhgf3KoGurUy3J+xcoqjxbZyCsbbnglX5o3C0puHybQPDsAFs5yo3orkh\n2dJmOUo6Pf7p/c3Iqmo5SZMTRuOWJzCd6gExGhf1sP7CObM6ctP/A7pYWKo6\nWes5z67B5W4W+A3DbS1MNH2QIHgcca121eqsAYmOKWUoFSYQVv89x0hgDxZ0\nMLjbKT6939kmN26XGj8afd1OjTOdmGCpcwaJzmRGLIB7lUYolcG7g2yhbBHR\n0NPXZm/Xq5VUH4dUDhcDcTkYW2rcicXmMrmEvqHk+P6ZLbiv3q0Y+w0I4ksE\n9CAe\r\n=KuK6\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"902112040650992401c06be7a85996587a9736c3","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.10.7/node@v10.15.1+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.15.1","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.3+9021120","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.3+9021120","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.3_1551283759652_0.38117426420027756","host":"s3://npm-registry-packages"}},"3.0.1-alpha.4":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.4","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.4","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"mitchmartinbb","email":"mitch.martin@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"pavlemilicevicbb","email":"pavle.milicevic@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"35f65226faf1f96172cde39482ab640e9faddf8b","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.4.tgz","fileCount":162,"integrity":"sha512-7pD1L2qpG3WROPjkPmUnnHiWncCGXtWBWypfV+58ZN/dlaV94ESknnI/UE0R0T6woflzAz3+nAXx+Ww5s8IkGA==","signatures":[{"sig":"MEUCIQDOha0rgMpcG7dTssRhsRl6UV4WHg5chCBfEbWgrJoKjAIgcXbyeOmZa/LWiBLjZro/blDZxpP5zI1jP5UoDdeTG+E=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356413,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcdrsdCRA9TVsSAnZWagAAfn4P/0uPGTtuNlM/PoUmJZij\nMl5Jy5u5n5xtlnjq8DFINmJ3YJA24qL+Qw1dnHMVTBJX4r9iHFR8zm9AW1rz\ng8grUEi4EOd9A+DNDWKMds5r2NsLQp3VvGaQBeiHix4ZoEImmQqDiBE1x2mg\nAcQEZOVRN3U6V3VwopEOyo37R2+CfqrZ9ipki9bD+aQKbOMXC10OGEP4lQa4\nnF6JEnnScgjp0Rybjp+qy5h6Oj9eutL9EVemzso06GgIcFCWY9ZnQ21pkfQY\nJGJTtIG3wS0Qngn3IyjK9TKLWaqG1aymctG8TMLSyGqas09w0lcGwsIlr3Pr\nAwTxAHaCKkHJVCRZkxXvIFngjbAdV/lCRogUqcHVfIuvVJc0N9yRP9Dx5ueG\nPkHLQw30QV+76q2uFboT1lq5UTqDEoiyrjfxO1NlAlHr3Q5lR1C/UyHiJ9wY\n7X+5iwg1KqoiKiEvEMz9pleIMCJ5vES/jCXY3fBud1moOhfHUOIiNE2VEAA9\nW3EDbHvsX/RbRiWwPi10MDA10MXACnJlSQQ9aLf72tKNARF0nPDeKnAl/1cE\nzfNkYpspCxd9ExyizQxsrcyprmat/f0Mt1/ITcnKSksCeqGRKnpBM6dwrJ/0\nIcfqm5hm0rJc/EY2Owy9ueI/9g+RppvBhN3Eykbn4oKxsMlTCr9ebkMakDlQ\nfmlw\r\n=ZOt1\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"3a4650c00f07ff8840657e4bd3d9d5638cf4b4e6","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.10.7/node@v10.15.1+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.15.1","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.4+3a4650c","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.4+3a4650c","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.4_1551285020628_0.8636104481347933","host":"s3://npm-registry-packages"}},"3.0.1-alpha.6":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.6","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.6","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"e9d98b443433c88d3cd9ebf0b8c026bc45a6e044","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.6.tgz","fileCount":162,"integrity":"sha512-BrIF/3tCGA9uHgLIbiv3UCMaF1hgWXufrNM1ab7O4soKnHtig9op/EiARHd9z/nikyOih5pUEM17e020Z7Utsg==","signatures":[{"sig":"MEUCIQCQDM/iu/1U/Gt5m/fT27Jkh7VeXjG0j2IRM83juQ7vHAIgJPM0KmacFw2nptkk6WYjAzcR1Lp8zCuCSUbXlzEHXp4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356413,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcezliCRA9TVsSAnZWagAAqx0P/A7+XcQ9P/qN49GErCoU\nsv1yiHm5U6TKcLV+BvcZZGl1UnnsstRFcNcv5QOc9KPwUxQP8v0lOsAVo1EO\n+43KTZD0XwE0AXA658ye1vJBEcdbdS0gCWlSpUahVe3Nmh8zAiIsV5AqBcZU\nDiuZjHxBJQREkr8/2kFh7WywuwqSPptVwsC0wLhzVwgqrXGWhkhq7WR4qObW\nG7RcgjxKGsukjpR9ItiI9RmegPxpXX3sY460LW91tXlZlttNlouWxdzuBtmQ\nNvzdQS0tY+4D0RC8MvWBj8ABOlBOy3PS2fmmu9qxZ8yA/+sW8v1HIbmsWvX8\nhgV0TsYGVju11f2vVGmSc/cj3R8FE1CbzfflemDodPsLsaIlkzJUO9ZA5U3k\ncwwCjS2htY4FozquSPYtmpH4A5em3aecv98C24IKNlzMw5uUb+Q0NXtTu8W/\n3GBLTnpGONGZdcQ9H7OX1wMrxfYNVkttcPkHx/rkeHyWG4ZoTu3qmaZvVA5q\nBbJAfAtE8hrcm9KL4Y3LYfJ1daua4YkPXmvziqQfSJZkf39ekcPxfNakU2yf\ndz6u7iSMe6C58NsCCaaAIlzeOei+d6vsA+I9tMxlFVHywF2yG82ZQ4RaNMWT\neSIPCWRlJCgqjDWq2SQeocBGm6jpjcEO3lmd9srXyvp21/h0FCtxn5WCJ98B\nUFFc\r\n=3W6x\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"e49f7c864c02b25814681ecd1d3f812ac0e15eb9","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.10.7/node@v10.15.2+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.15.2","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.6+e49f7c8","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.6+e49f7c8","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.6_1551579489617_0.03507672019364616","host":"s3://npm-registry-packages"}},"3.0.1-alpha.7":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.7","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.7","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"d9769ad72f79d89a40ea45cfc1c9335e4d3edbab","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.7.tgz","fileCount":162,"integrity":"sha512-5ayVT02iyIfJnT2oWoheMmYCulL5/ukmsd5ymjYdkgngLhcGRJkG8VI3qgptQ5kkaJSTG0mfyIFBESkE/1nyIw==","signatures":[{"sig":"MEUCIGczrK3CxojGnlp5GNx/ag+oTwc/AKgiQytFJbVk4/83AiEA8uu6DJNNTIErEdHL9yBtnR5X1joWIsTXPbEaKrwm3rU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356413,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcfXxGCRA9TVsSAnZWagAANFcP/RjRdD3yQljWDvPY5hXA\n3xj3DNokQTN5MlMiF2bQsJ0vkA7nc5MQgImJfv3tkSVAK+k56BDQjH93x5s2\nySkhV0jJrBM4+pNnUbuVUHC8wxXmyYfz/V0XeBl3SqjlkJo2grCCT72CKMZB\nP6S60/lUfb5PxaEUB8kK/MG/6LKbR1Ltt1bkakHaWBLnW1RtHX+TknBnxp2+\njv04NOIUEpLRY0U+YS6yGuahQiJARlTHWHMmMWioT84aVkodmNfZ6jXf+n0O\nXYSFGSc3ZugY46W+bcMd6ZnGm2l1HdRgHr2mEJwUU3e0s3OJKsI1aNPRe5Kp\nQ6QBVGIdhUnglkzlQAtFns5Nepkq/kWjtJyABT4zaivaPR2jItyXLAUqq0d0\nArf1BlKKVzQwoMovAbpbN8EAsG0tvH2OYI39SnqnBIC6MxhoZXIkyHqfMDfq\nOfsTB0tyZJ/B64wXX6zRohThRTGoKoTmnvum5eMt6PWKUNb0VFSbuLlol9GO\n+zqwPNCRIp73GZEwDccA5WhBkLQIFXhIZWBJ8unIHMtOzL2DWZqHNcBEDSjf\nWQ671KKAg7i/pSkfUSY8lup7m+JmO7wsJhh39NceOF3gwrijwaMqVdETQQrs\nRWh4YPHJbJGqkZ6dlyokXlrK9EU9JfHuHyG0f+cTEbLAmPcZFZ0DvnyZba3E\nWg02\r\n=qhNE\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"7f8f8813f996fd25aa9f3df6ee54cd51cff8075f","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.10.7/node@v10.15.2+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"_nodeVersion":"10.15.2","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.7+7f8f881","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.7+7f8f881","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.7_1551727686317_0.659913854682799","host":"s3://npm-registry-packages"}},"3.0.1-alpha.16":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.16","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.16","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"1fde034044e6f4479a526a75ca5b4368533d26d7","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.16.tgz","fileCount":162,"integrity":"sha512-7VL88rfrPWx3TCekfEpOIGXVsK18Tbl9nnUM2UKt94a7gFboLCrrwJ/66rRkEk/JP6UkspFb7iII2ZbB+otFAw==","signatures":[{"sig":"MEQCIFM/5mBnp8nVVX0Y6fTMZls7ziHnhw50UeRiP/k3kod0AiAlFROc8KLGhEnD3DcCvtYXxAjBNT68MMfzpcbmWcdkgQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcgUzNCRA9TVsSAnZWagAAgfYP/j7SEeNFFSjPpOTVguWQ\n21V1Oe5PrQp4ekMJHYHi5xghcaTtzRhQW9uOPIe0S/RAkzuwDhCqxPZLJuvP\n/Gz82Gtre/ncPbq5YxA4cMYc9iJZCKFT2iZ3lJixTneGmB+/3uXuOVs7eUUB\nHD7aQbvLGE92M3qPFo2wMnbjn1zH9wuCmmEgg9oEqjcrvMLxW4DET/c8d7w2\nSrYGXCG4ABveCYU2KMm1gi53DAdJi6Igy+BVjqIRBtBYu4d1t/VZlS/x/MvT\nqFJsz2/5xKiqGH2LARtheAAYaBq28HnxEGVfKazJRR6ZzL2rc5NPxqqqCBkh\nW9NLDgB39kGBe401CLcLWYjGj3vIDS5ag3rw2srzHOMosYOU5cBVfo+8ibf0\nUZJaQB6Aqn3AtuEbRBswURjJ6IDh65CX/oqvpKJ9LtuNbR3EifGenMsrk5xV\n3MfSU57p7uAUaSH/lpvVKDOjSwVQPmXj7VWbDotZdsYm7KCXWiaaD+316O/a\ntQaXT+y5hUyTgT5w7vWJr9vtCXkBfYDCCPTbAxpqnjpXCQmNGlX8iAm4VIVk\nEue49Ijjqo0PWRx9pfpoPq+WkeeAzOfQ+oswP5BXm4lDlfRdyEQPMukhlawp\nG4z0rmQ2SpJEYTcgFeofUX1Py+wfZmWlpnh3f6nT920D1OlspVoqdRjQwxhY\nZk8C\r\n=WyFt\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"ec4013ee653eb5d9ca1740bea05d6a03aaca185b","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.10.7/node@v10.15.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.15.3","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.16+ec4013e","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.16+ec4013e","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.16_1551977676787_0.025354044297778877","host":"s3://npm-registry-packages"}},"3.0.1-alpha.17":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.17","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.17","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"98f4c5c4d2e05a3b77f457b9520cc9c14977c8dc","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.17.tgz","fileCount":162,"integrity":"sha512-xEBPBhCAlYyZScEuLFhjUlhMMUgUVEcoJqw6ZqgQ3V300t5eXmxJO/O+3VWEqo3EdDLHsyKTIyPg+3h98Y3c/A==","signatures":[{"sig":"MEYCIQDXXZVWVx+4EGWc+7imnFQHXq9ku8HvC8n1STDe4xzXVwIhAMypsE2s0gbrftMIlAcbwe/QxlgcHRoxqZVsJR9gFM9d","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcgaFICRA9TVsSAnZWagAAyfYP+wcgS/neGI4hAP0mRvST\nCNEeqLdrzBM2F6AWcuW7ZQybNNkIKVCdlISp01W2eU5ZwnS5qhAiTg9ierT4\n4+JB7ZPJzDXWO9A4oeylcYZj5UIimwGRYl436KTOjnUQD3AvD0YoI68kUURO\naui3u5ErlV2tBbkia28Dk77j5mezAcxiyeyj4H7UIvgT8jmATTKkthusYfmW\nQeW8priQrrfY142CXsCq+J3FjpZLKLRbQWRhUm2C5T6okSkNcRTdpiW8QN7m\nzJZUZcSnEgt5xGLg3Yavws/X2RlmWjwyyibschWdAucHnSWpTbP7KF8BQGvF\nn/BWDsJcgZdLNZiUn17Vn+nrwrtZMujuwmPtgbsLNITCU1uF1XLHLSkZNjBo\nUdy0DS4Z19jZI2g+wYeYZzbs6mFpTL4VCulrT3sRQgi7LCpiW13B3RwL+atM\nSAkm1RD7cvc/9Zhm5tsxvrzyCl81QytzQbrulh9NKgFcRGlJTE/zi+RvA3lo\n3pcjruTFwfl5LCYWORWTQu85erj2oeLKhkZK8zZ04T4aflw52wnksnrKwacK\no7dhcq6AqzdEyr6X/klta44WURtoaVJZ4lBkkHr6YxAWfuR6l7LK60H6o9C0\n4WJFWwbqN5rQMFNHfD4xarESZDmDPHRKwhY6jqdeSk9zXxeBsIrqRZS7NSgF\n9mso\r\n=OIdO\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"aa9f84997a3b5770e52c18aecc4310a2b36cdd28","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.10.7/node@v10.15.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.15.3","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.17+aa9f849","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.17+aa9f849","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.17_1551999304377_0.7384611477978578","host":"s3://npm-registry-packages"}},"3.0.1-alpha.18":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.18","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.18","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"41f7de675c91e68f91ff89cabd5ff6e73e74822f","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.18.tgz","fileCount":162,"integrity":"sha512-C5fJkBkLUpMtF5htPzMXtTaKd1lxR5BrXdKNtw5lYBRRr8z73OS7xS88wUb7odIgBUGVTzxzt5SS7n8L/SYilA==","signatures":[{"sig":"MEQCIAgYGEKPWZ8TLe+nH7FLsigc1I7sE+RKHkK0BYILrD0gAiBvuzHc1Kn6ecgODJLpGMDcCsRgXa7dQRfxxyXDKhIn8A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJciBshCRA9TVsSAnZWagAAV9YP/2uLChH/f34EfWzkE0xz\nQPUM9ls914D+NdOgMo6+x29/ZHVQUcJ24xI/KADRDD4UfVVxq3NwHZxz9reN\nfm/LLHihvSGz2kx6zMO/qcu27bXhAkH3FeDIK33R2ImFISOZezlRD/eK+oOK\n3Knr3rLxjDuAwYWtoz2dLCiL6dbdXMPMnI27q4DrkRqNsRZfrIalWThqHwlH\nqWsNN6rLOipwq1FPeH5m8U9CmW7tFSn0FDtfr70PHW30tC/7A8jROB3S79ro\nJb5pX7N8Hv6JKLsUHKq6G8YNf6s6IjEyPYPToYz/H5Z63N1v2ZjQtbfth8AB\nU0ZPyoCnzFW+HliP5ztWfxtwuh9ankDesh00DOXl7x4U8DPV7rcyTjzHD/+Y\n3b2iEvj0pvLNSWbAliX9gbWkDXC/B8G6/mRGDuYRqvZtko23ltMSN2P8qwug\nk14BFx6iGjWczVhjC4ufAwmM6lXHukAyKVPqYawfuFDFxUMTIOrmr5jzlzY+\nh2ppm4TUZaLv0yNm7MNsnel3E++UslRRafuMaXtbXN923J/lbRtApI5Yoc0f\ne0rwYjLH3NdJfpgVe8IeVa6aARdkDlPqZihsh28uvwmD36YXIBICe7nBv6rz\nYLqn/9qfzDOFYwRk4IK7oB/QxobUkdO5TtKT9TAxHVrtvMwsZ+UBuexDsGkU\ni31M\r\n=ULKX\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"c9c8f7868d867e3ba827046a2ebc2f1be43b1bda","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.10.7/node@v10.15.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.15.3","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.18+c9c8f78","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.18+c9c8f78","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.18_1552423713038_0.6371264819869933","host":"s3://npm-registry-packages"}},"3.0.1-alpha.19":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.19","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.19","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"a960c5100543529a91f6af78161b34589c50f14e","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.19.tgz","fileCount":162,"integrity":"sha512-s276tyOQ8ZJeNM3pCg3E69DZYBqrE2WacAPW8zZhajrZUvbHmJoP7nG50kLpqPGQdkGGuoUK0XkliGKEMR6Yaw==","signatures":[{"sig":"MEQCIFCNbZm62LgAva0qkQGVnBrwhTknTt8YaZ8Z7FJrbHT3AiAVfEMHnLFpdhic2AEelXGo4ChKbGeanSFilv3rpDOuXA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcjAquCRA9TVsSAnZWagAA0eEP/2B2/g4FjneXDsTatepd\n+rB8JwkIJkPAATLtJLYUQDU3XPgIWu2yD0CHTVm/UxUeOYRGm4zDUBTkoc9/\nXxVyoMaJ/Rwwduil28j/amWdGsWL+EewRACa1OUXwYa101BtWPqEbduyS55g\n/m07ZL+5lfmaLe0699v+HiABFZTlvzvFG/eREYmMg1LsdW1WIOLoBMoRncPm\n0amTD6xsordWWUiy+3d+zSkwaS9k9vlL2ubPAuXFTzssWa8wBrTumRqchzuG\ntPpUyon7e1ta3nX7F4rENQQ4lj1zSyFjH0MWnmbZv5Tc0RGI+GfOfg1H3+wi\nTWlG6mvvqnn6wMg74RdAJtJ6Hluyc3unIlUvFSVLC/T4PGsrf+ydTaVV7cad\nqNuoRHcEm+oOuLw3hAQnSVLqnQ8Zyc2Muz1/GCGOdcQik746/4lDVoP/dV1G\ndillW4W5hZKX0pBscV35yWDT05IUfwMUJpNV2XuDlEBqwWbVvORL5OgcSbbn\nYXDKocUR8Als0TsQB64YfH5Vksd5/iGn5tC2wsCXl5+IDfBxMUhEOdhXVaay\nW/+pOgirQkmt7GEzyOFE+xz68etydTnvye6Na9kDmXUfANyi/Q5M9pQ9zJyS\nn/XN8aYI9GS/7OPVIvGLwq6T8w6ZUAjAxOV+0qO+xcVdYC46jdPFr8j4dHIC\nJTYk\r\n=8rHw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"6a3f2d0943377c22eae80bf0e13bc4f132b08180","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.10.7/node@v10.15.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.15.3","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.19+6a3f2d0","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.19+6a3f2d0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.19_1552681645428_0.09449312356253659","host":"s3://npm-registry-packages"}},"3.0.1-alpha.20":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.20","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.20","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"a2338c9d4a6ceb8a90854627e9d09f507466f372","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.20.tgz","fileCount":162,"integrity":"sha512-GGS21LfINgbxReeyuTy+5Ao4uCMB8bGZj2Kpa8O0HT8kJrC9QXRDkmQ+XEbLC+Umue1/j1Fbv2c60Ui88gB4aA==","signatures":[{"sig":"MEUCICo1rWaHutQysq1QNaklrZ0EL7O53uR/zAoYEmO+99M1AiEAi4TxN0Ezw5s5vaQ6TXCtRvElHQzlB3nwHjy5CWAe1DU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcj711CRA9TVsSAnZWagAARVIP/1EgFPixDTvwS4tujcrW\n6hW4z88z8chdS7SrMQMuwAmHny53r8uQ2YLB2/uy/DdOlVZh0cHPDpao/SIH\nzD/cDJX+zj54wHlRNFhr3ZVJERqJXVXPXtEhxV8MxDdDjwk9RQVRYrg9Mbik\nRGk13mHk5kv0M0ugsit7ChN7cvDTCfKBonCtD+81mYARjgmodrYrKGrP2CT+\nHyxGq3qhJOFlospJxuVHE9DreVkKbzLna4+LwYpuJw03MztBX4M2zAL53/FW\ni06HTQQacPC+RYEr6/NZmrWe0FsgQYRxOmUTHkBwHnLNvGXWw2ib8OgngAPZ\n/EVw3Y7zs3608hcfIqrurHtDIxQjs0p/jsz9M8s7ZXGbQ3HTzsjMhBcw1u3R\nrDZUgbfq+5ZXgucfnhsF3SxoIp615HgYDYNe3jsTd4qGzefh0Xbl5sBtXR9O\ndkrSWjegg1fMb/T5Ou9XzHKyj47MfjtNJZf0nUn/nBzkxH6zFDQd0PV9I/ta\nL+DI+djF3N5x0OrnBVMGjXwmr/7u1eX3St/g7cr3vgSdklSfsEg1Vx/2E1nv\n4oiJKsyTIxZwryT3etSosiFMnUEyN6GQJWiIIhepMqO3N6YDotWzQzy8YgR9\nphYaKqd/UUyt5Ei5kj2WOkUI75z1mC0jAiBUYoWPEFKpSSYfU8kQQ3ilip4w\nfYnG\r\n=KLlE\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"d861de69a377d28d33a01bf5757f36fcf2df07ac","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.10.7/node@v10.15.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.15.3","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.20+d861de6","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.20+d861de6","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.20_1552924020860_0.525470618446819","host":"s3://npm-registry-packages"}},"3.0.1-alpha.22":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.22","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.22","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"}],"dist":{"shasum":"0c04638ad8257a9255db26c05593739d4a861504","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.22.tgz","fileCount":162,"integrity":"sha512-FOtTwBCZsde6Icfsoc3dgEAxhbNQMezFksClClpkcP8F7oxxjHqKXDCyJsBax/5r7RaL5dOu4gE6JJlh3Fl/Ig==","signatures":[{"sig":"MEQCIHzuv7scECKDOPELoVNZ20qg6W6GM1VmMg8O6f72sRQ4AiB1lk8fI4wyZ4aEdpMYL/t4XipOEASy1lDkdB1xCo/oKQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcj/XqCRA9TVsSAnZWagAAcrEP/3Bp/Ye9W/ycsm2Z3BjP\nR6HCTr6K3vqej2ySRmeo4VsDuzKJd0p6fosj6DNfbM7jYjxhXiuYlAzoSDvx\n/jArj7umE7m7KW8c845rf8kjaTm8tlj1RjswuvJyciAcdFIFKUSNT4bb6mDV\nqnhfAn9E5RZNY/FQ4/vst2dUI08mdF/OfSQ6Fq4UEfEc3JupJGI7oGQgfAmd\nwqr+KH0UWyLGWfsLC9Kj63gf+/SHM+VwEkKP3yYtQEr5sjKkvrhTP9gCSL80\nlckIophsn3OB6LVMgy3lSO0VxNwDLyB0jKQk2jWfEaVuq/cn/ZvkyUYs2rk2\nyH6m9NhztlN2dJaHQptrpquniNzSumMocywkuND6MLwUVcuzA8BffSuHBS1r\nDhd6cFGlIOjQq0mqCREZA+Dfl8ZdEaGVM8rcO4TlxNenEf0N3/mG5/S5Jpmb\nYN6twuT8ARFD98avmEIFWaK3j6iEPcHEsjUviqJC+FzTzaj9p+zpwVM3FeZ+\noYsRLqd38dMJqmi2ACHLZXE3qo66rI3GRevJmvdNDy5Sfupv3U2SnlTLDZ0r\n6tE2bVdbMBGEYkEVaGn/x99z/4rmI7y6L2/6LJ63CdJmenVbeUcnUU9cZJ55\n+yks/ucjo5TTsKR2C10UAz2EMe5MrXFicapWFPdQp078Gts/iaKw44nbkzDb\nxhJ9\r\n=1fhG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"dce1570a575f49ad9f926bb9608d9aedc489dc02","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.13.1/node@v10.15.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.15.3","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.22+dce1570","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.22+dce1570","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.22_1552938474090_0.8825129225915986","host":"s3://npm-registry-packages"}},"3.0.1-alpha.27":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.27","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.27","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"687ff23161375e78c84a2d8267db9f1da1a6f57e","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.27.tgz","fileCount":162,"integrity":"sha512-TVHq7re2JBLTK1KXzoGM1qmzx+DwcIkLFswnyHB6r5L63JKo/iawtGiqx/WYlWX00KdUwL9nYo/dChznMLQgjw==","signatures":[{"sig":"MEUCIQDZt0t/3hBHa9xVkA/LpNSQ8NYU577BpQ9QjHPMj7bhVgIgTO/9tACA1zXirEKgApuFgQeRpPSd75eSEJ2kfR76HOA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJck9G4CRA9TVsSAnZWagAAfTgP/jAP9jyGdCAG0k3WmU0X\nVl5J5GkfSUS2431d7onYUROQCAzl7A0W7Rs0AQxBOSeOkhp+RGAAR5JNFn86\nGA6vwnCq2mYTIlXcSBCmvXL1wNka6XO0rM6FsiWehd6spgqMp5atPBvZAch/\nBBqxzJeY7RLQiGVgo06RVPsMh0cgkuiy11w4mTy+4cgVM9Y8d7zA6vWizdVK\nufxYXVgvv0WujSWhoN250TA/LIjYPIvbIt2cGdtgY4MaB9X3QAYisqGx28ot\nAux+P6BzOyMus1TecjX2nrEs/UUiXYwK2MjEANVzeSrtEcXch2HFZ7oDtW33\n+TzjtVRxPAMFYjh/Z1960wdi8hrf2yz0cbke9CE7A6ycVL2Y12BcicL1tYdK\n5XmXDCe0v3VS10sOT4Wkrnf86L+LGV17nMwdFx9w+wZntdyIwYQRP88377Sn\n/YsK5fcuGGIQyl4m7fA1QHKhm2vzabWNe5jNK8uoKcodkG5pwL6GTgi48gP9\noNBZPW/JvZuSUnA//c5y4/Y3dRf7F0X/BEMrUPCPTJ678VreayhhlCzAbf1q\ngS8JgFlus+rnataEFGbljTVB9EuhRvvwvFjOJhQAFXeIbkN78JoJtiFmSn6p\nhR6s2aJQZc5Jq2igZGbk76RBOwljkc9r471Ee0gkdHZ7ulhuUifnuZlX7yam\nNQPM\r\n=O2G7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"5b1909c5bd23e3070600dbc689032c43e1697171","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.13.1/node@v10.15.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.15.3","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.27+5b1909c","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.27+5b1909c","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.27_1553191352001_0.6836672840575757","host":"s3://npm-registry-packages"}},"3.0.1-alpha.28":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.28","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.28","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"ea55b60a2f88477688385ac2d6a94de1d6ce79a2","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.28.tgz","fileCount":162,"integrity":"sha512-K0ahModX8vG5Nuk5CfrCuIvX6974EyUZ4vxSimAdzuJwPs3Vq7PQXA4MLyFNhaKIY1zPAgpabCg62KlwiwsFhg==","signatures":[{"sig":"MEQCIFE5Jg2qhg2siv3LE8qb0uibn11Dx+ZJRk9l6urd1+ZuAiBeFRQbvcEJKpb4JiS9zPbpVhe4cvN6C3D8/P8JWuCPig==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJck+nkCRA9TVsSAnZWagAAtfMP/iD4zdITg+2RN5cr8Ak9\npho5r+3r2P12+Z1sOb+KflxZ1UQ+QX6w7DeVFOrWWKMPGnUsr/TDcVfaIOW/\nVo5yhDuwwp00NM853lL9RbFEFCeZSgkesqDFiaVkMF76KEl3wkddTHT6UtrG\nUd2EupwgXSmaH7DnAqZhsQ5ahRiR1oFx/tXcMf6S5bpRDe9HK+t8I6HqaYQ/\nnyvQYnhDUKJg6jgxjdRDAdhgKqSrN7r10h/GuKeApEIyLjNfLhFHT2p4hFpi\n/HDbYSFi/r4NWTMP6Mw58Wf3G9SHeDvypcA34xoKc7BS/fFOHzP5BVLjDzIV\nhs4Sws/WJ057bXiYW+CJovYXZ/+l95w46OjcjbGgzO6BPLfJyANqjEz0VDVM\n3KN0CUyf1wo1hrnFIBf0NKo+gW26Nf0KPll0370QAj8nfXWXb67vLH2VmPjM\nMDPXUljTZ2AssEYXMM4+ZQDyT0N1oYLR7WoY/7OrsgsSLqjKKxIF9sEbNYpw\nl6W37bqhZ+BMfTH/j03F4OD+y+01vQqh/yXnVlk+0Xa2FtRIio+qdgtEC0Al\n6l6mkv5PprQDLaYCAocwzB0ofRwEAg6QVuZr4S1gWNSIGHTFoVxT4q/1doYH\nLYTDJH1sSriLgat+mYfdduC3gxtcJ3NNejv6XESWEAXlQuPPAqwnK+CKRNLS\n8QzS\r\n=ZoHr\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"48b416106d3523ed0def7a11095dfefffd341c40","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.13.1/node@v10.15.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.15.3","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.28+48b4161","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.28+48b4161","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.28_1553197539512_0.2987558317670955","host":"s3://npm-registry-packages"}},"3.0.1-alpha.32":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.32","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.32","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"f6cbd0f040fc8cb9048d296e3f0bcad2f07fae10","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.32.tgz","fileCount":162,"integrity":"sha512-+Ey/3sVAyZs01DB39pPTjwIEhlkGbQF/0o+gVWyT5Mp9lxLN1GwkGD2syGzufJe+iK56hZ33an34zsBvWTOExA==","signatures":[{"sig":"MEYCIQCclyTOE6uVETTb/knv2AaedhDRCEGA1LveR+PEUYxixgIhAPUY8K9NVvI8Y7qjXfFBY0Ulf5SASwKi9J24n7AiAa7F","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcmUs7CRA9TVsSAnZWagAAMhQQAIE4K83AtwiOXBqIJZ3L\nmtCvXv534z273u3qeTLGo/xfYGHcwgKCdYdiZf/Dfx+WaY8+WM01E1h3jjub\n/9X3N2PgJQg1jZUHqALZu0zWNxmCke2TLQbYwt9HSL848irzG5Wl8Qhpq3b6\nPJX7pNqOCarstfcVHuLUmHPXiKN72X/sBp3Qdl0jvoHH0TC/8Pecb75HDYTQ\nvEGg5kzl//XLtiRU7g1NAcmtyvEy6hn1uPMkdcjwoHLTt7kgUd5wT9xq2fey\nFSYeVgH45FVoV5JYgX+5hWWa+cosTc/Hk5DZVfGlZZjLShgKIbMoPexmfaW3\nc3tfgp5lOpAPjnl5s9+6hBfYIoCEZ/cwNiqRXOWBVEGrolBeycfRUlAkrjJf\nDhURIKDP9fgLUQ4Z3kGnLgW/QLvntAIRnkH2jIk9KYcqZKG4VbcTymyBajrc\n/pH22tU3zNeQfJwAYYXspBzInlPu17H5OsJWt8+FQX4ILq7+vxUO0oZ1UMGS\nyUCkwXazkGb8IXpuidDKlGT1xSgZUQpcLoRgx76oYlVzBoqOypcPG+D04RI9\n6lNmvhwwOFjxHe/McS7PPo+jNdLV5Jm2cYLgd79zZkmtUIda4fTJISNGtdDQ\nJPXE+1rktDaLGZKW0zOaJ18/HjeM/2XFPl7hTQopaVRGfOIECBF0j8eNq7cO\n6/5o\r\n=siis\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"0c4bf6d203fbd048811cd3fd1829ed1dbf2eb98f","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.13.1/node@v10.15.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.15.3","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.32+0c4bf6d","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.32+0c4bf6d","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.32_1553550138338_0.7475055535014832","host":"s3://npm-registry-packages"}},"3.0.1-alpha.34":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.34","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.34","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"1f5af9401eea37d3d4b54c0849452418509bed97","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.34.tgz","fileCount":162,"integrity":"sha512-OoLggSfWEKpOcJjMbIJwOMvg7fdvcCIl9DRvtmZTCbSHkxnyTIppb9DTuJyk4LUbzEN+54ycWsbVfBMdFh8wBQ==","signatures":[{"sig":"MEYCIQDoVFsaPD9Qa3LyZbOZ8ujp1O1g7k8zO3lMetPbpNUYtwIhAJpgGiX2NUGArnjcmG/fR+uHDpwEVPxximzEpouGEaG4","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcmlSpCRA9TVsSAnZWagAAMe8P/j/xYeTPbzowiahlDQML\nN4bRLDyGyWx51jQFIp7cMvD1993vStpx1ztITa+gQ+1N8gdPzhb6ufbykuRS\nu9MEulDSX5QdfW0FKuWXt7BkK2yftB8WzTcysbJNHXPwknzL4tX8yTbPpVVi\neONCslATv/UxiNadIDf3GR5nN+hTupfU+t4aTqbdfW78HPUlYMbuspODZr9L\n9T9GjGaSNBa7h2LoBagCXjHeDRFdycMHXK0Y+vw4HQIt8tpjAkRH5BFDDUr+\n0Up6KsBgF/y/vC9mvVfHeFOeALMHKUZ2mWTXusWbo/MCgwEkGi2kW28PMByb\nUmYpcKLm16SY0d42T5hb/ttEGCaJfqFJDPoB8E4UFQsi4G1pgmP+OXdHeP9+\nZsy7zAGzsxKvZ4z41LIc3bz7vuQiaG7acn8JSQUsYE8H1upzZBzaHftchgDj\n6MeOHlZ6D3xqgnEkipwWfzYxuzQRhH/CyH3CpRYMCnUipv6TI93maxhDr8j9\nbRuqQo/13R9NzxZqPX3ylWb82ddIa6wMzgRAPcaNTGN0JfpmYkMLi7ahokye\nnmGiA83JjEAcaNNIOcd2zEMSw8AwzyN6HberXd1FeYSxmqWUfbQTq98aT0TS\niAVvgcSKvVOGu1NLiDf/16IqGG6krOqDlmIxFG7ScItqc6Nw8RekV86Wx9OT\nr8e5\r\n=6Mo0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"da4e807bd3c8e7172c4be9fe67a74784cbc8124e","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.13.1/node@v10.15.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.15.3","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.34+da4e807","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.34+da4e807","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.34_1553618089011_0.745231205364713","host":"s3://npm-registry-packages"}},"3.0.1-alpha.35":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.35","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.35","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"efbf6d301b6d8ff41fb742063dd5f0ac64b4375f","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.35.tgz","fileCount":162,"integrity":"sha512-TpX5Vbt7d4Jfsz8UnENTxZR6Q6/dp9O9z5RlGgi4Ph9NVjQcxGoCZdfhHUc0or/MnojbRf91af/KyBa5hbOQSQ==","signatures":[{"sig":"MEUCIQDMpQRAIxHortEA8ePUzroulaqPSeMhJrGWVyO/jVs+VwIgWS4/GdtZMocHRHIK+kmJ0W6jknn4wg1ZkYsQbnjc/p0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcml3NCRA9TVsSAnZWagAAsf4QAIKi+aYIcZzyoNqqtN3b\nUS91qakdtJ+1aSAsPzYZy+cCGUN0wGP6HmNadmaQyJ3zmSSZEXGnV3GoPWM3\nmllsLXXxX5NrKX4RHe0CcR3Mzv4ZVmOdc7G4+wnWa4vJDdMlEOm6xAHSGIPH\nOTgzmD/2+MqsK0gGZWp3UaPc9z6vG7njOK5C3o+3fiOCDSKilPML7lLk8q+w\nPS4qBzerG0WWtUK07Dyf+NuS8AuQB6go2UZezT2boAo9bvzfZm9ViCvRLw/V\n4q/yG0tzuFFhynx/GOkswv7m7RQEUMXdOtYDqcIz/t6Z6tLnJxiUDs1THNLt\naJmDQ7Aug2WwkvmtrDVGBZwcg0a6UiHC4Zya1pgDCmbz2NIHVFwWb/tB2uqB\n5h/+b6YOuDHSZgNczONVecV6hMM+bmwUqodl6EC0XcI+AYvf5De6hB0X3FaC\n0cdcyHDG35cuSUQZjJ39c2xbyqnkczs6Zbwb2vGv9jHht1NW6mqRoxVgm7Lp\nTpjBS5UAnqQ651R68vatIIdKUGmtPwC+OCPxLAorpq4YdG+Gd6k8haSe9iWk\nwneRwJ/9GcJ4nkMhxGXpvgNkIa0ylbItThNkeMRobEeY0XH/IiFdc5ucf8Ji\nRS2mQgSCeQLaN31eqwqTMvuCAPGE/7WsdMictpTmmKtzBKUs+8HmpUhxfQQ2\nELip\r\n=30ep\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"69d808f15b8c9f9cb5efa9bbf8507bbd80df298c","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.13.1/node@v10.15.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.15.3","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.35+69d808f","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.35+69d808f","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.35_1553620428337_0.6088921946418715","host":"s3://npm-registry-packages"}},"3.0.1-alpha.37":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.37","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.37","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"2aaefe0575968544741820bdc14e65284e1e2fc7","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.37.tgz","fileCount":162,"integrity":"sha512-ZUroCKHjoTghYRxLEghPAaR8liJ9n59bv+HEr3MhUsadYyv/UX//7nEmezW8tQTPlDJiCKq9mOf0Jp6qJKWz6w==","signatures":[{"sig":"MEQCIHgLtDAfWeuLnnI5BnpK9EdYcFBA0QhpLearQacXflwyAiBGMaIktA+qhVibK+Zl9TJIiEsMQpgy7R1OJpaK4FHlqw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcmmrDCRA9TVsSAnZWagAAKM4P/30EoS1nWiipbHtlIN+F\nvq1E2UwwAFWMJjSb7X2cnyW0ksbzDzHdl4ynR8NZG3BPjphfq8poqKzhMOSb\nnIpkeloQ8yolUKBGAbIs0t+DRVNJ6+DuO/rEmgicYOA3PxORFaMlE0xQNTvi\nPgWSjvTPYdc3fP765h2J0OBqVKjTC3u6BYiJV3C4dA4TEoL07Kt91j40QGwn\numHNT7ZXZtnBOxN40sC3MRb9EVsuxXXKwgZFOX7XCMbEdWIq9R0zmb94dOcV\nA1AdyueEagj7ZfZVCGJsj6lSikPnlv2sBOorv8e5SiAF8Rttw5K1t/KZ9PBX\nih7JgzuIG/XZPZd5Kq1tI4JmWX9sAt9lMYuKerYCNB/6GAxFcFSj+WT3jtuu\npjb6g/9Csweb12ZVzIwY/KzBAEJ3S1g72CawlIgkNT7IQvvZl4i0SCRk4+vl\nAUI02f/+ul7aFBm+4nhKtzrlDkevP86bfGGH2X+kFzm3d6+vpNr45bSVJRAw\nvRfcDb3WTTOay7Epp3iDntlz2GtrRaS7DuxVFdOxen8NxvMAk/MyDAAlnzsb\nT7gnpKt9JkQe+XnxBDFHVChsadzgc1O5aZTHARjg+UWDojswZ/aQthsuKpaG\nJZJT0T9xUZW5V2OFIgTjl9qMAhEzTEsuoOlWiwVZD/oyXPAo3Io8+GyJ+r8n\nO/Be\r\n=zVBP\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"aa7d1f634ed3abcbf0c7cc27235c906d3a2d36a0","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.13.1/node@v10.15.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.15.3","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.37+aa7d1f6","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.37+aa7d1f6","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.37_1553623747011_0.06048253431366435","host":"s3://npm-registry-packages"}},"3.0.1-alpha.38":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.38","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.38","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"be86e6e0ed3e6726643584285d1ba558e2fef273","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.38.tgz","fileCount":162,"integrity":"sha512-qTgxqmhEr2xpWxV7xTZTZjqIul6L4oU6BtRLbR4mWHMMT7Kk2ZHIfJwrB9732YqBY7aXbagkDxk0XEoio2lInw==","signatures":[{"sig":"MEUCIQCOaZgOjcDwoidVVNN3Gs1CUReKtW4YZnsSeINruiszcgIgNQcuQAMiLNm6XUH7tWPbgx4tDpJQeoADLq523ZzW09U=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcmoKJCRA9TVsSAnZWagAANB4QAJHefBySRgfjJmeGv/+a\nVAtOEWhVkESLveGEgZ0joEseRX6Z1wFCuVmOrFtoqfhhrc7rfNjT9s5AGeV8\n/TU1p8H4w8sOAQF1+Sem2LGMc7Ti53c2kQlxzQ1Eyq1GTRNWwoVDtCuFapkF\nQ1+aKiN/I6XYKFUsU9+8XHnrctgdyfdqqZIm164vmlGPSZH3mtf7K1fyr5XZ\nZROQVLfHWVO0fGuGf5MJkIqAEu7+uVLbVdlabmZ2d4RCF8LtwXISSmbAjDM2\nPKgMbxJaHZ9SLjdQZbsokZCM3eHhuAI4XVuGy2zu3Xjo52WUzHxUKpM5/+ka\nQclb6dlzC90uy1TuuGSox6yEnGvosFjo8QzARMjm7jbdET8vPxjMYpm9Je3i\nRvSLnWzZ/8OYMn1TkKK/Tdt8rUTWJPf58NOY2A3S+CM+lOWH43oGATHjk/LU\nnWawj/Ds1qSzQt3S7EGmpfnxUYSydEjWS+mkwNZgvH7z88C3VEucsmlSeisf\nwO+sV9p8tVjUaBtEGUDlkoXv5KU8co2t7ReMKx/f+vfU+c6hRK1KN/uHEe0Y\nLVKryA0iujhG7h7x0FA0Z7kHuMgGSKMiYKgQT5uSpip80s0XZLnn2tZBYMys\nNArlJJZ0Wj5XntSsZb0v2m1ObRkcdwSPV+P8Gd0fxxKm9TWkVUoqBb/qBHxz\ns7rY\r\n=09z1\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"1e2925aabb7a3a93fbd3dc52223d2ae50b894216","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.13.1/node@v10.15.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.15.3","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.38+1e2925a","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.38+1e2925a","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.38_1553629832321_0.8767192165559494","host":"s3://npm-registry-packages"}},"3.0.1-alpha.39":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.39","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.39","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"3e110ed944af4c4982680f2c993310ea2ded1ee5","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.39.tgz","fileCount":162,"integrity":"sha512-tByTx61NetgcaCejqEapwwmfzRly/aQOxMow8nDLwP6X15ZTR3WxP3J54TIX4vebmzPCicaoleCC6ZjdAxgBzQ==","signatures":[{"sig":"MEYCIQDYex5eorAdPxt9x7LtEzjheRWOdHkgyIUh1v64INDhAwIhAJNUTPluwhOVPKy1jtVR1hvjCUYTxnrCRq70onCae6qB","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcmoxcCRA9TVsSAnZWagAAj74QAJTTzq9Ir22a+b+snqbS\nv9/lGBCI23YTM3PJR7QbjoGK4q3FvlFSkXkQvSYln+V08VstrBkq0EhCuIJj\nu+disaB7EJA3pBpKVMJe/ihLR4nyIPybE1JSnpGJjxouSkdvqQjIs6MByu/V\nnIlFUKGZJZsHJxOXU0S9tK2MkydwWT7wFQtZS/TfFJ5YyPx21CEhUvpNzHVi\nuq+kv1Cp4aJoW+2jH/Qpt//grRqn16qD+NhIrJhY5iIYOO92QOgOZMC0ndOc\n3zZnKUQ5tVWJfAbLTd2rhay0NFWAV7mgFzTWxrRtQxBAiMkJovXLv663/gtx\nXwwONIKppt0VQCzBAXrGfHNJOMlvxnG67cpSIFV7DhmUYGupx5HxRxfwSTML\nrusXsxcNIFY5rpE0H5Sp9VOimEkpfbRhNSrxxgLD0x3BSzgj/8UGOYIw5w8q\ndaNAKLxY6/uUEeRzJ5JsHgF/vAvBdlw9IMrRA/J/iYOaJpfsZgsZvrvkBMW7\nghNNCHBweqQN2Mx5CAOnbxectYhuWby0P3segaonkwGyvLJJHld9XPXzCtgn\nZ4dTYQMgAZQylORuXaDCxn9DKVIm7Je5mt5PEwPAysyxkK1/IaBu4mCk2E37\npI3ouKI+iTNLMUV0KJ3ehXd+D2c1pJcc2IOoWHiDsxwnnNNlMrULNPlom9zz\nUNUy\r\n=t1fw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"19b9640203766adfc46b85972038240b127f8acc","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.13.1/node@v10.15.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.15.3","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.39+19b9640","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.39+19b9640","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.39_1553632347603_0.7580334050955877","host":"s3://npm-registry-packages"}},"3.0.1-alpha.40":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.40","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.40","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"c1f4ea53f74c38043ceda7a50250172f7f076a91","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.40.tgz","fileCount":162,"integrity":"sha512-kNv8ErD8F0DkrJjbDNVO6n72kOnw9C3urbNo7hO3ZndUkkNVjSJoroLQzOHUcueVahK4sHtRm2Zwih15QDus2g==","signatures":[{"sig":"MEUCIQDVdFBkY1BOMeSLcIXShVI1rv561EnHImFfG+KQl7XRUQIgEXP9ZHC/EAvWTiHYx99nBQG33YYLa7hJDvJNkwdw99o=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcmqp3CRA9TVsSAnZWagAAlrEP/j+L9dXmkig6moDAZ69b\neEzi5GuNN97whCkHjBjdrR3onEVD3VCqOfaxKMj9UCheP2UCLY+kx55Xvlji\noNJ8vX16iuP5yeC10OX65Xz3kaUdaEdoWknu79y5C2olThj53ZXmpKdxtgGx\nhWH9szyY6hJUqFnmNvBCDOY6nSADza9XNzmzGC1CSyN3u7qIfpJ1D/wITVY4\nJD4TbAbwTufA1aoWL/kIXqOmqtZEyTFQ/cPLz2npdRMzcnJVDAjP8MhtLe2K\nOFlm1+INr69fvGfRS0kjAhFZGexte4L4UXLRqSt2AxobQxK9fYIm96x0PuiR\nPzYV+feP6ioOGDovH/MZSo7pRlyYGRFi/su/SQ4y6zPBWruCqhcLPzd/IHP/\nVqBDaQe9rTaARvMs/GAPdTCuf6G2zeSnNc1hcZRgRsbKTq0N+aQqip3ziaFb\nQWGqAITB9THRQroNc60NrrS2QO39m11g36kAEl336YEwaNUy7quRkhOlqsjS\n70R364CUWGHMuLBLU3QB4Xp2jOnwDxCbsJjb6QFjrqZCwVKb8O6vBtrt5P0F\n8Q97mTkhUqk/aLwZW4/bDrrWuqXrM6cNuiQnVozwc1yrdUiYLivrTso2kQa1\n0l2euPwAXSqxcgMXvFYWFZZLX7ko3FA3dK/a8waewXSdWxqtGf/uLZ93+t/H\nBY/8\r\n=wd7U\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"57827403bbeadc46ca8d0e96dad097bfb6e56efa","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.13.1/node@v10.15.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.15.3","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.40+5782740","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.40+5782740","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.40_1553640054602_0.756178224528657","host":"s3://npm-registry-packages"}},"3.0.1-alpha.42":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.42","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.42","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"1fa9f660c13f91f7f9d7a5fb31174c9f035077a7","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.42.tgz","fileCount":162,"integrity":"sha512-Bu83r5s5f0B6rUUvGjChnKND2Jjy4hefZyT7ZZWaubSsyq1dp03jm8l07UwY+htqqDhEwRL++EmwQ1RxXsk7Ug==","signatures":[{"sig":"MEQCIB57clJG8Ni0PQdWIMqrIpcLyGbISyV2aPMtcuosknzVAiAVadh2iPW96kTJuhKW72Vs7NWHYYXCCPGj5b0xnI1Jjg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcm5pQCRA9TVsSAnZWagAAsF4P/0NiSRpETRG3oGRLGoeJ\nOZILa0eVEFonXEaV3jIVHk4e3uuad6X39IeqwbnpatsDQHrn5geiCwVbcvfg\ngMpv8MvOYfdjph1pjp2N8ODcmVDOHriVToc/oILwY18PoMXqyJh6y0wKFJMv\n/SLw/7VaxWJxteElKx5C3fkjzI4DoGBgofWgo0p72tEuN0NRTBbfNBDlLvi5\nQAFKsRPryduHvJUXOe+zQOOlY9FNr3bUbxCi/g0XxmF25ZdSBWkxhc7GS39O\nWDkZb5h5pon+suWhV/GkbB0pHo+Z5HYZb9Z0xsM5/n+25ogRjsBr5ABkfonL\nYoS0Uj4JTgdO2k1p23F6jspp4zbtDIppKy+fGPPrLSS0BFRzJVg+xpLIzN7M\n3BaO/LsFwdVXQmzKdh+6GMGnLgQhHLDhnBaUqGnsl1JnWUBFeToif2BWFSIR\n5rxMloUqWOP7HIi+ykpqromUKNYSkzV9xfKPHS1eG67BMGkPELKQShMIzizC\nNQ9Mizo3AG/Rxy40G58uagUqMhpMe8E35cWUZ113PuPXrFeQDopWdnODALEl\nswiqMgFsUfud/jGYOatz2pp2Qje1cBu2ToLAWihzK+gLrKJDSOf6ARVgsvxN\nl6lYMbmnmQ2t20CyLwf5kVa8QSWStBNWE+5/+C+qn7Kmay1+zk1T0CXx50UJ\nsWpv\r\n=BbiY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"2f5bf834e259f729edfd3829a53aae4dec5efb63","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.13.1/node@v10.15.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.15.3","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.42+2f5bf83","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.42+2f5bf83","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.42_1553701456182_0.1592774811102995","host":"s3://npm-registry-packages"}},"3.0.1-alpha.43":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.43","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.43","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"ecf2c4217922a211460af6994df9bf2a7e647dce","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.43.tgz","fileCount":162,"integrity":"sha512-8qC6VgE0aAzPZnGRQ+imKyFwrMRikbiZAOLtMi8IlSTVF+c/ralk8CWWS8eWJCgBeYXJE21Je80sM6ZkwM/g/w==","signatures":[{"sig":"MEYCIQDnJgJd99//VE3bRxBaUBE8Tp5/JRIoyo+8oBVKYW2qugIhAJBCKSs1rlTqqSBDkmgbo2Sat7vEYIrJ3mR5TP3WaMb+","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcnRU2CRA9TVsSAnZWagAA6fMP/0nraR/L1mDXxboC/f9V\nlCRRYEXZncNJVaMnC1zYG2K+B8Ew24C+7NfyOJZX3WN5SwbSR0zEfoAZ7Kzt\nUZKj4NCp3/2DMx8MKtyI4CpNKZXjiadMFe16gLK8wXhxrbaoXaApj6c2/pqI\n1jBrNF+Oawz/jMHoeHyXK7hQiL7mfYhayvid2cTkn8Bg3I/DH50IoDfeEK+X\nYUm03sXqabit8GeJMatko7GUaAUT8e6MKAGaOcsSprKWQ89VltezW1vS9ht5\nLNAuQQ8hYH78msmofd6Pk4GEXjgRfU4/A0ElurEnRm27OJLoKmTlwQwJr0uL\nkbllSwC9EMErrltnocjBH3onvO54JFx5+LFOBlYIEh4zxJXB1MoTU0ibF1cS\nlySyX+dQgK0xSzLD85fW0kalKXIRJoDYe4wBHuhGxe7Nxw+WhL633dty3GVw\nPmKkVr9c8Go3sSGpDPWVxJJdNl/eOZOe9LKWvVOKoRK7x2Oobaxo9wMQHkUa\nv+6BC13xnH9tSEdwPfTv02n8YxsBVfdkcdh1Bmf76gnxTWriMxW6tGCfJH8z\nTWrGYeoxK+FSUVvdu1hWn1lpcgz4uqGPKg+SaXXyNQsTZ5ZQ/adf3mYSvlyv\nwmDYHKruFI8u8tn6vSwfnt2vHdt0jYTIAryRdKmlvt46ZcQbXsr09OOTwzqn\n1fVs\r\n=GOQk\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"3ca71f0c00ef5ed5e6cd4a1dc44bae220a3b7c84","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.13.1/node@v10.15.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.15.3","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.43+3ca71f0","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.43+3ca71f0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.43_1553798454295_0.2619519880118104","host":"s3://npm-registry-packages"}},"3.0.1-alpha.44":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.44","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.44","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"ccbdc69df36743417a4dc991843e29d824e87549","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.44.tgz","fileCount":162,"integrity":"sha512-Kz/IcnoVDdivDXivreYfEkIE2xxzt54v5ZEJMLtg+HwIXfDD5j0SZmVMpkD9uZ0ZKE59nnc2L7cORAIYDHYggA==","signatures":[{"sig":"MEYCIQDqh6yRwQxUgfo8dqVlf6rUkr3966GqQ83LrA+0S/GFlwIhAOw9n8WO+/BwKSOLmIDavLySKiaN/UlcwCtaVv9zqT16","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcnUyyCRA9TVsSAnZWagAAK5cQAKTsqo8QYWaLquTjCUK5\nstmlb8DA0IIxfjjAW7wNlIHE8SUDA3mnxRM62NRiicCdTQukqy3QO9QsE3LM\nJvEmxn2Z0h9sV4ycxzZEwGbtRZDaq8qFlh6Qp6+FmkN8UF5riAhlrfECZL1q\nLefzO15ute3uB4ZgPUtXojj0cYSojUolb/RxzOGN22ZVNe57h/ECtkLTnYqX\nB/eR51ZUmHlOFhZKXoSPSSvr1sMVgAHw0zJnOZk3ssYjv7e19k8YIS/dD++M\n/rF7smthgfzAccqzI1Sm5px0j0fNyUGWsfCNnJ900XpEVWkNXGF/h9lejWrB\n5YOcOsghdS6b/viH+bRe/LqOVBuWTp31rk6SIVG0+VY7cGlo7xXToqBWDLZX\nSIDvjjI2MEfRMUPm9d+PsHGfaWV/sMQ3X+wLJkpXckFWKwwlF5ickVRF/wnr\nXxq9+0nzuhmrZomRrm9F14/tfjz/refnC0/V3oWWLZq5fzoMXra33f/18ZyM\nFF4McDIyDlToRFptxisHe0KxVfAdH2p315bXy2RlsgP1AUc1cnWlYam/Qxaj\nyuv7dRr3zazuuE8ZtUbiWkIhARXTxO91cWInOL+kyCvc8VjE0P0tJRl4SMJc\nS4h8ijBViDOTpZGIse4QfB6P58cVZuR9rooSdphN+xJn/9GHRfoFj06qGwl5\n3WfN\r\n=eW48\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"2708bbd53f21ab6d101256a2cfddb8d4b4243819","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.13.1/node@v10.15.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.15.3","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.44+2708bbd","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.44+2708bbd","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.44_1553812657875_0.23769880714874492","host":"s3://npm-registry-packages"}},"3.0.1-alpha.45":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.45","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.45","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"8883d3c0db7b044f701c28ede8fb0c66cdc1b9c5","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.45.tgz","fileCount":162,"integrity":"sha512-UtEd2YX1uQYjXi3GdUcH1RxM/6HHVte2ElRg75BunFvyRGuGoYahwrSN5LGKceHZAiW7mbvt3Dj/ACVh0yUTJg==","signatures":[{"sig":"MEUCIQCIgTKf7Hmu0IaOSohA4bW65kfDzA6tNuBCCnhtH9Da/wIgKuLNyj3eDUfnVtYYfCjQWLJYH2jrEgcczorYFyuoffA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcnYoGCRA9TVsSAnZWagAAbUEP/3QhJ2dOmE+mVR2PhNqV\n1lbjkh5F3NVzOjeQrPYa4LG1st78UPXmcjxKxRz7gIn/XzovD/G/dHzJIbsG\n76oRNhTCoerMXCDI5sncwCn+cqcquGZjkTGQT6vC0Q/QOX775yO0OyXODhti\nc80gHE8i/ekhZB5WOcuoo9aAIcVwv0J9ahdFizY+8Fi2u3ehd7d25uHfW/iH\nNZs07Xl1UBiRGOJD9QlhuPSLeB4+4f8K5zlQFbJXtXWh284WRUaIQ61Tv34j\nJpLIM8hB86+f4qMk28GcpwwSoytvAXFsiKai9xfhTlEv0aLx9WZhcEqVo2eT\nQxj+Lmc/SBX12vOV+mSqmnsVSPue0BmuhKLJcmHfof358skFr12S1Ze9nzJ5\njYRoSsrWOYxr9GdR4M34f8aja6QJ9mSlCn9gtlPplwEbWon80kCHB4PmLAMi\nOmxqF1UG4wEqIGB5Rn4MOc6jA2pWxtsrh5ohz1hC782XPYgcKQDgE6zrLEVq\nDFX8Mngr04A0gbeRtGfZhFOkoV9duw4m34iTjPtixDIIXOqldhB8Qq+JCz0h\n/GfCoKsKoby18eWG+74h/jckzpNcLuu4J7qId10LnZUTZchgpY5dk54V1dwY\noYpfT1YGJRFszhoUj2nw0SsbbOtQzJUJTl93BAgdvF0++vhb7QSlhqksSYx+\ne2Kr\r\n=COkH\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"ca4287715af5ef8b8cd8b24fd098d9609f2d14e8","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.13.1/node@v10.15.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.15.3","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.45+ca42877","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.45+ca42877","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.45_1553828357794_0.9640653341102112","host":"s3://npm-registry-packages"}},"3.0.1-alpha.46":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.46","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.46","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"4c53e4b32f8944e4265f0d50a42497fe6dd80381","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.46.tgz","fileCount":162,"integrity":"sha512-rX9eUiZ74nmvOL9JTVluz2Z8bQSHjwUv8rKAsALkGMlOD7dekXLSgGq4B0rUSXqU54lR7Fz+lJ9Zz1aEk5edAA==","signatures":[{"sig":"MEQCIFAOhZ1mA1hAFv19gMVDkO04nTlZVrRIDBXAAAn75JY/AiBoR57duJxRxB2MfwZAVUwUuUNdy0bkkTf3LllnLZd2pQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcnZBKCRA9TVsSAnZWagAAed0QAJlMS9P3ITu5iFQvp4YT\nqrYUYM+J+3deyPVeYASk3U14w+3OTF749oIb6QHO5VUNSn4dYQVsKM/RuKQj\nqAPaen5rgMyQjHbvRAkYdYFGn6BbMWgQC1Z6jRXNixuMeZmD52i+i9NxZEK9\nLJj439IPEUbO3B/v/CVQKWMkkvuHEr7w+uv9iGpLVpthpuoS/23bAEkW5Jas\nWa4g1kTvKtTlum3DXBZOfjqDpo+xzmQA8e+VRKg3JY0XVhk/PfxYS7UfoRuR\nXFs4OFSIplb4spowM9wRX2bsuV/N9JNfV7uO/nTns9Qiyont2OtyOWgYZ5bb\nP9X60unlx1RDACHrWkTJ63ckF9FQC13OPz/pkWCQArQNDnPNr0Q94+Zn0s4F\nF9qBLzGwLjMttTmL3TOsSvmNSMy6Odn5Tr+x7Jai6B9QGvwKIycEf9fp3VHQ\nwj0DD432x8MnaTUrw79cJjE2YScmRIMISVx2P5MLfJ1foRsX9KmTcvDC6Pgc\nGkfTUIp0ILw3FXoK9h1xAZFUmrNsacGG/21RJVvVNbfj5fBkro0pP+JJBe4V\noQp1+8j1XnCWvufu+a6WKxxxyw+6IEDgyK+JI9fjTGXMit9n0tm7OJ/GMp9e\njfGe2WHmQot1It6rXIAm+/PzjJJQtLHK6//A8qEC62esEkme90JG5fuAMySz\na/hT\r\n=O+Qs\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"1b4067a4ea257f91e6413769b907772c2a860f5b","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.13.1/node@v10.15.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.15.3","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.46+1b4067a","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.46+1b4067a","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.46_1553829961418_0.8731788514679812","host":"s3://npm-registry-packages"}},"3.0.1-alpha.70":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.70","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.70","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"597c7c76ac4d94b2b2846073a4434308213d1241","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.70.tgz","fileCount":162,"integrity":"sha512-D8xs4N3OnytnX4Ig2JgLzjZN6CdSFyStiJamSXliewCMFZMUkJEbxdyI45vomyTUGU4WR1qYmuTbMuGozjSfbw==","signatures":[{"sig":"MEUCIQDfpV//4XYTrqDtwErCNZrhznJP65VLTkq5A/5fRBitfgIgZEOndIub36fwRvOM91f1vY72Fvl1T86xrURP89eFkZA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcpkinCRA9TVsSAnZWagAAwsYP/RBf8eOMm7SfTaPcyT5A\nXD3LlHYyNv+whorr2XlG1dXGVZX+6nBfbctt3pmUiabpUSdMXIRaWL5eCCJA\nok8tgam4tLwwnpJ/fAqTvzCLoT9goRnzPUoj7ry/qbn+lQ0O4AN9e5NkrAxI\nQIH6jTuBc3+1RbYS5RiY+ryh04xIH2MHgtnqyFtyDIojDKIfdc40nvphQAfs\nWAj7mxNswsukM+oGRONFBJCSwerMZNhAcQL/TOV+wnADyUNLMsNtsUaQgplw\ne7QanLrLpUyhLwAySRju+/sW7jxEuUthmkYY6pMuFitsysK/ZQE4gcSJLbTK\niqXXyPM7b88nBbHD8tCacU+lP8lKWmVVoa+d7QBcPHPLmt2RQEcC3NuB6DCf\nT6PUpXKXqcXRWeGVUSxf4fGbBz97IM6g83HIf3x6YSVmM3jvjVs/qFePdATa\nE8DfVZ3Pc1h5hipumP38s6jG5nEcR3FH6ApPDZV22YdlbZXwyGKs3JXuRScx\n1LhUkcVmbs9gRZW8ZOl0XQ7OwKj8zpONH0e/iJ6UVlOH2zQ/9xDz2g0MRdh0\nkeP5NQk9r4rgp9gUDYzbd+aFbDzxo8FWuto/Dt+KQNEzckX//mOvkJtX5QnX\nCfM/noy9crnV8FpCBgPAR7Q+zKuUefCnsNfLmr9VGVnm/pm+KSuTTDvNAPR3\nYFBC\r\n=ATkd\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"edfcbf17498c1f282ba2d7805041a62ddf4616f1","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.13.1/node@v8.15.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"8.15.0","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.70+edfcbf1","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.70+edfcbf1","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.70_1554401446879_0.8463924987817257","host":"s3://npm-registry-packages"}},"3.0.1-alpha.72":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.72","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.72","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"0237afb08dce1916f6c82400da05f0ba24516015","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.72.tgz","fileCount":162,"integrity":"sha512-K+4eEvr7Flzz33UO7EGbWmAmIk1Oq+3hm5ySndedKAh1r4K8WGm3VxLfemUXh80pttmxY8QGz7V/PhD3qqJ/jA==","signatures":[{"sig":"MEUCIQC/AgYKNq0/D2KTXG5amfCM7X7LWNtaHDjhgtE2UxUokQIgLnjU/GYgtRQ45GCnet+FvEFDxZuqjTSFol5TTClSI8g=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcrliqCRA9TVsSAnZWagAAbY8P/A4fbT42EkhhOc46Nbye\nV5BanxIkMh3H2IpEogtI5dRpSyQBGHj73TNi2uW3TfYXqCNqbOet5ezTrHEe\ntGxyI5brSuM013+9Fbh5YIuUn4ZJJPA38g9rw6/4cANgAF8p56rIFpiW/DR0\nFdiBnQ5eCzcwBo+N6W79ikNiOlxMc444GEa02fyozWFp78O6O9/VgRxdNwyW\nKc3VGTWxkmHGr6GQ1e+00MTzbwZlKaQEnlm6syIDz/6TGW6dtbF4D//wVqpX\nb18iXlqoDYyUt4txn8ZiXpXdpOp2pta0+hcqMenDuQf9nRedX00haJs5g7O1\ngbZK9d/Q+l+TQK3eXJs5PPIF4ZA0N7Yr9/cR/trxY/6Ox/XiqGMTiIQCAPFf\n1dvkIu7W5vxNtX6f1WOSDPhoeFwbiUz6xkZ2wyX3m+l5vN4RXMD1qt+P1YDl\nl6g0NtBYguZLjtWLD/otzve6C/nznJMbVGk8jeUSn1WGIxaX0BkQDiyrqkxC\ntq6elLmeH3Rk4WLBxuauNJ5xdojFJounp1YssAzTuqg3ze2w/r4lJUJulJI+\neWZZc46lUKIhPEkosdaFBbyS9Mw0z6cCDxhIZ22mErB+Vy1azHVMx9rORfvx\nnXmMFwPmhCk4gnBzlIPvs2XyBUHPC02Cczf93LdVC0mcWmOZPIxhK8uJ21Ku\ni/0y\r\n=JMP7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"18ab22fa7152fc8f41d2baaa4c8553be9c968475","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.13.2/node@v8.15.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"8.15.0","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.72+18ab22f","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.72+18ab22f","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.72_1554929834013_0.6212244095170658","host":"s3://npm-registry-packages"}},"3.0.1-alpha.73":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.73","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.73","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"28f91c82d027c34d87bd0518be29ec2ed80e6a52","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.73.tgz","fileCount":162,"integrity":"sha512-86syQ3irw5lUdm99+a0rVdC9Iq1xeu2+WnNMNl/ILrU6zFG2/jJQ+e4Ycjgd9ats/Bujzu7NUCf3/BL7dUGpJA==","signatures":[{"sig":"MEQCIDpbrjjaofhFyTFHehc24SZs6BbCs4HB+FSjcX/LPYJ/AiArnUFpooU4gt5Olza/4S8YCxXfsxPoVbmI0Jyn/UxGxg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcr4PhCRA9TVsSAnZWagAASYQP/jWzxQ6E3Ut0Rs8cal5e\noE/DqdG9OFBjApsbJ0QjRHukukDIoI60z+sfLq/oAphCzi/eAZbZuBMAlG5g\nIW3EXPMd/70h+k+QXsboRKxVRwqDeFlX2tx1leSM3QiLot1zadNCUvrFbM2q\n1C2XLjEgdyHHYMxvstltZ1H1UdEgiaqSZYKwQbpMN4ZCrb5ay22lDukROW+2\norR7jgp7BlLlN/epVqvC/ZW58zsPwgbaESVi073+UQRc6z2p4pjEKw2pboWF\nPuBcBDo6qOhl9SX06D7ivLqmyulYgtuewst7sBKkO2l9Aoee1lQJzQxCYRUZ\nKJ35mbMIbZRNFTmWTN6314UZfpJpfO+FJkuwIPvZfrrUAwrqjeFGJaynTz5O\nVWKK++2IEnRj4swT0oRdBncAEQIRnDogG4jyQAbt1+ZVCO4AjAERgZ8m+/PH\nm5D/RADmZwABCqfFyjzQKQseICyukp1uB6eC7kBAC/ZYGD8vDE7pSWmdN6z8\nTrmWwlK/d/Ctkw7FE002R41J3GVLOeP3zxLO65PEeTn6nCRUYAPfNjVh0eSe\nq7wvJWF81N1bXJSFdAPg37/qT+cFPeS2afdezIVDAqa150hUNSUH0yRcKmae\npPSUXvi2AEh/igRZLRu1QcNu6Cfhhi+3NHY3edqnMnGMU/w4aP+kRiUWR5Gd\nrJut\r\n=ZRwS\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"6ce7cefaf561e15cfe1c1d1a98705bc5e36feb0d","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.13.2/node@v8.15.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"8.15.0","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.73+6ce7cef","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.73+6ce7cef","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.73_1555006432789_0.6379723865559372","host":"s3://npm-registry-packages"}},"3.0.1-alpha.74":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.74","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.74","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"1a92788a6ecdfd0bd1857aa96a04575e7b58e726","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.74.tgz","fileCount":162,"integrity":"sha512-jFnn3UjBEakw7ejYoF31mUOiAojz1zMWFl7Jqimvh06MW3rwDcyIGsuAVeZYjDSPs1NG7iX3MxRi0SWARw27Tw==","signatures":[{"sig":"MEUCIQDWOCzgerjoIMJ38kceIYUSh2vM5ocoZA4vQKX54UxkKQIgdNH8DM8bMZrWGKB/1gs3jgc9ZfoLgIGnhOqEifBJPEo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcr58TCRA9TVsSAnZWagAA26sP/R+u4/e4hJjcEUZAiKfJ\nkRKC0ylG5oXJf7PnX/1wavne5XeRTKYUR77pIaZdDWbVpFTvegGu4HiEccTS\nWi7ggdu1mUcVp+8u9yKCoCdLgZhCCmlUm1ywwhvJxSE7t0Gos3b6XOCa3ETO\n7gUiKtV6nWRRSLCdo9/6LpcZ6t8Y7JmLayvSUfOtGYWG6DRBRhFXypxXott2\nHzWQvBisTubuhvBeXIHlTvg5PARm6hJw7iiSlswym1UPdVgFB4Rp7oOjY8ol\nmgYfE+MQWN1pKw7ogQRlCszxHPSeWlGuI4q9+Tn6tmiZKpBox2gV3MrYlNey\nYK5VAQ0DBUeg0suSe99n5qvfV10R0+zM5UM/OKulFI8BFGNAiFlydu470ggS\neDlf0tB8DMQ/BvtAg2tOlTEYmWASSnsK0bIaGtoPBCmcbxXe1DES2CWRKKvq\n6t8UQdmnMh72BiQsceBUrXlkx50Sra5J8c+vL2pupXsl76Fdt+q0e0NGvoHo\nuDabktPaKbJTc6WSSaiXSYltp/DZQqenWITB0jxD+DeOoq9xTKbj9rfl1MSL\n2K4GOODq4HUqA0TdYvtaYgAVOhNt79uLzCWAq6skLLvMzvKFhVi7q59NcNeQ\napWp31Y7z9jGMdxCzsFbqIdpOwiizN69yGCW0FXUaM4UnTzahZvf7oh12TXK\na6JU\r\n=pWC0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"d10b0eb554d29818bddddaecbd631762368dff2a","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.13.2/node@v8.15.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"8.15.0","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.74+d10b0eb","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.74+d10b0eb","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.74_1555013394793_0.40197604491829697","host":"s3://npm-registry-packages"}},"3.0.1-alpha.75":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.75","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.75","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"9bc57c362ff95e9d441711c890c510b0a3f9df19","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.75.tgz","fileCount":162,"integrity":"sha512-IfEjw2wybiQomqaJRpMufa4QwdRipxOvqxnbjIpSzdvMSBku4n1SKmMfZdhIhPBzK4DC/DeRjECvbJiBY2VpUA==","signatures":[{"sig":"MEUCIF9WjRTu1VxXCayd3mDsqHGV/YBqUsSNzEFzOm5/F1rRAiEAm8nbpb2huA0w3HCE6VEX8u6k5khOU8IhKtukWSnfV6A=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJctg3QCRA9TVsSAnZWagAAi04P/Rg1UV3MWuMBPfQzSoyL\nZV+SJsZGQqSbHr+w66RurVksE9sGYAHHjZKTC4FjqLd4NAI9GYbwYfZlBr0F\ns+GdJeFQhuVyHU1IUScoxsqMVrMXdA8XuXl+QYudSIjiZEhsm4U5mg2S6YSO\nZdz8USIChxc8tNKxJbtve9rHWfer/ZXBV+jjNrcVcDj0SViY7sKyYmAaenLl\nZZXKHNp7R1Wc6O0LWtiOLUBaSobUBQ407Hfhon+w/4za4C0W4nVOd3MdlYTY\nr6DlHKgrfCkttpfgU8PFerBsWiVt1a+usSc+C5eWFyudrWiF8NgKkz5AMp2D\n0ICLaDGFVpu40tDlbFEEqAiVVQIx3QWrBQToMyoLoDFNeh4ULYccB2IXaF2J\nvqEFg50iGu9gEApXSaHZwO6c+Ux39phHJzSjR7bu9AddO7m40HKhv5b7dJbA\nT2hEljDVudQmYyHrq7GZOLsajpbp8Xuselj6qSjNH0ukl8+7odJcwlERPn1S\nNeG93IBlpp3g5X8ALn1JZf/egm/Bp+52JtG+LO7fpYbYXtadPTNh9GFQhCnw\nmOyH6ijXdw8EnjH0wEu6DdHFCkhQ/7MWI6tTlhURrCFVecOaOBbM6PuKMjk5\n6JwmLbYAICwblM95505zjYkI92J9KQa2Fr7ym2iMJna95FQCVM8vyO7OXDGr\nbLLJ\r\n=h4wS\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"7b9118bc1c411ed34ec59e37bce80aa80b011a6e","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.13.2/node@v8.15.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"8.15.0","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.75+7b9118b","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.75+7b9118b","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.75_1555434959156_0.4519434180363524","host":"s3://npm-registry-packages"}},"3.0.1-alpha.76":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.76","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.76","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"239b7542f50a61dbc24435a920a3c677bff1eb0c","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.76.tgz","fileCount":162,"integrity":"sha512-9H57Uy9FiD8P4/sHLk+IeG03qUoRDbiBFBau75N+EszkWt0GRChY8Fp2s65ugYce+XlCuWkFUkqf5mHcqv/FqA==","signatures":[{"sig":"MEUCIQDXGvSJdzGC5SH0HxSyuZBm3mIwszQZjzm3uI/UW8h9FgIgN7bNmnQNAkF6rlCQDCbbPVTGiKBJWn5nOtQwdEJ9skw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcuNrsCRA9TVsSAnZWagAAlEEP/iTrhRjiHjG2apYkPS2b\nTf8rVJiKk6Y+PvwaOpFHRmESM++49SD8hsRwK+CLguXgDA+JTghcZD1bbADB\nTC2vA8ba1aSSO+G21eVouZef7H33SKf1yGsC7V3rTIviHDc2JyIX3q70kiBV\nE6dOaVlD+DTSvP9GXvwmvRasLA5vMogsHBjuO1tc7Wo8aM1ZTAsLEXlTbJ8z\n+v6IVDUoLrk7H94a3RHhtKp9nV8QaAejsaB8uYQsgyFPUdbCLDfETmunp7HW\nAsqt4FBmpjn5+ZVZE3JH2RS8QQbc9knHh8aevfeavr2MOAw6UYyShpONs3DN\nCRowDj6vjLofAoAcihSLiK3t+PunIwXrrnVcX2xf6IUZ53bD13qaSw81ZytS\n4Y2AKtVE4uWs6Mxpwe42C9BO8O3ba2sFjH4foFvF4BBLRfDstG1jpf6dBCeU\n66+rxrJ+rH9rKoRUy4ZQUQr/SWqQqxAFnnF4TE+5QIh8g4ojzBeuQ3ycXyRh\nJqvWuzlE79b9aYScmipGGnXIZ22cY7ivRf+HOFdp98UEmLXGavLLuECPhL4x\nsSreBW2VcAGwPpRymKMlzWWY/wyGyDA9mMk/l18wEVwR1Y/ukb1fvJYhQozp\n3Eynt8n7OOhucvZfqRWcJwhGbpAGCgcbSgjpxNLWKj1aI5BjtGtQdLyh3+i0\nupqk\r\n=UwEw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"86be4ad26fd050c701ede22aa46101573638a544","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.13.2/node@v8.15.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"8.15.0","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.76+86be4ad","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.76+86be4ad","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.76_1555618539780_0.5982250644156462","host":"s3://npm-registry-packages"}},"3.0.1-alpha.77":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.77","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.77","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"593891d1c8a1c9ccb341f60640b0d83e05ab7854","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.77.tgz","fileCount":162,"integrity":"sha512-oABkvLcK3lC9lCNT3y4SOlBXX4aQc2xtUnlcsBpqxrw/a1rkPbm8ZDsqScwUPLNqkvqNCd9sCRCaNkYl5JO1GA==","signatures":[{"sig":"MEUCIQDaSg04BZtIr0CFkc1bEiBt0X4ZIdXdtA7LXLRcFnKSKwIgP6kj/P3tn+9aThJf+oEsA4y2e7taZVVux84SgPdGTec=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcuO6DCRA9TVsSAnZWagAAqXkP/jaPUzV2elCvn9Kgucuf\nxzg87w17mBD2E58RYblpZFfdsFam28RPmlmf3bBqpGBx4r7LDkPK0+YLVbqH\nbY+zCCjXInopY1tvyuBUL1wJ/pxoAq8fGc2LMnquRBerx3+FSJMmLmQ5U8nk\nU4eE+xu0ack3ytugTU5ejtzTk91uS/6eoEG+0+JFS5oyhZNNCLdv0ic3wB8p\nOW4iZsIEFq+OYSYLUmrphZhdPIXEOwnl6MXEHJSH27WOecqnDuO3FLRqACjl\numtl8tp1IdK3zX83gV5uGGXTnKgdGVUGt4ahbNYwJVT2UMp04FDpbrqa9Yte\nl9nsMqE79CWLdEul8CCIXfWVT9jlHXVKv7V1imhll/Us+qO/WZ/5A1PbFkqb\ny1p8QseSwJES8H+0jkdHQzRn2eCHFuKG59HpkmV31rOE0qjQxau/iDtS6Wm3\nzb9zWIPXapXtlddVj95clmjcb0rK0R8vQeDpO9eukvmYGI5OT//nf3PcSG2p\nhYzWzQ00N4/ur1KiOB97J9+IUSnKyXWR2P78Zw5w10gPHUxUQL1Tv+P+6lf6\n1Y+iIIYX0tas7TIjiV6cMvebgvJix+Xhk8F6SUNQSvkyH/z1e/ghmVO2fUfH\nQHmDPuBJo8jrCNe5m1V9lAC348SFOA/yM2a/nu4aUCRIiYK470pC4uj3gtyG\n0Six\r\n=sq+5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"ef131c73583156f5954ed8bb988c95f7e8d43387","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.13.2/node@v10.15.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.15.3","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.77+ef131c7","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.77+ef131c7","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.77_1555623555305_0.4331692561790512","host":"s3://npm-registry-packages"}},"3.0.1-alpha.78":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.78","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.78","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"345053dd870b020fd1e6a58ac67085f5e48c040a","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.78.tgz","fileCount":162,"integrity":"sha512-0QjfMElvCELr/e1Z85M1S724/smxeYKxhIzGvVegSwBYYJQleB7quEq0Na1Y7q/hRlz7UcSweg3/zoeOwk/a5A==","signatures":[{"sig":"MEYCIQCx1QLTu7safaHo7PH5O/aW2X/SlS8fku7DXGAcVRpKEgIhAK29dAI7QC4PhpAP4qOkb8bxvRs4G1kfNZ+4MgTOIqGi","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcuhM+CRA9TVsSAnZWagAA8wwP/ijtM7DytvlP1m+Trpst\nEEyU/wkp7TFuEbd1SU/0FwiAjapItUJr+vdU2ZMhuBclnHrVKKJUBJi7jTec\niWhvteXe/7Zhn1U4nxSKg+voWEFBy/9GfyITWVBqb+PbwK+flr6wqPwdf5lP\nT/yl73AIT8GBwdbZzKEC5L8IGfJidgPti9dbGL7E4yamPDtAQNRfWffov9Bs\nXtb3hhnz0cN1IHgiMnVGF0e/iMmQTtrh5gBiJAahE9eJbbUQ1NyS96Nbpih1\nECyuSYjTpQBr2k1WCXUyR89iOwuxnP2uzrWvgDeGOL7ov3bElTQFh5B7lZWv\nwMcl2ZkXPtHHxT3pLT/Z8zG11at+z5qIBipIH5gQn59Nl1nfnQJwF/V3XsE2\n2NCdNZI8Pc63Wx1aYwU8y4Oq3LtSCDhpQchjvZu2eU3KmOVtUP2kUCimnURd\nAYAewpGxFWJ3kEXlan0x3/r6puzxuAhZvf3buuY8H9s0D2sc4PpPvLOBhcqu\nVotpCNoj952MliKOFDW0K3UFJrzOBe+mcrujsHwOUR/PzTkw0m7eWectjOSj\nRZ3PmkDzXuCuq9267dT0VcfDappMnFpdjmBJImhXZof1HvynkpfpvNCwhnM3\nKDG4NLq9Fydpax6lIlo5SnzAEaNgxIHVia1xsyKHL8uwwwgARbon/TMfiupb\nM3Ho\r\n=tMdS\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"74836b65030888cd6bc888a37dc63cf7c3123d0e","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.13.2/node@v10.15.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.15.3","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.78+74836b6","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.78+74836b6","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.78_1555698493300_0.9231967134003576","host":"s3://npm-registry-packages"}},"3.0.1-alpha.79":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.79","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.79","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"27a6873b17ba5e9922cbc34c05827e657b2c96df","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.79.tgz","fileCount":162,"integrity":"sha512-mFxqQUZ6ClJDbKtE43415oq4EWEZbq4Syl8RtsLfm8oph6WDSOhx7JeH4fphRoU+adrLjIHrXluj+C6EjAON1Q==","signatures":[{"sig":"MEUCIQDoTaOzNHRNUGK1ZM9Z7Zy2GcGsmLA0kOmPBMTeTZiZowIgNlZGQb8gHSiLPp868BbFE3OYYhRNB+4EzPAiBEBdaPk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcviMMCRA9TVsSAnZWagAAHDEP/iKhvjI1bO8obzTE2XL7\nKQk8FFDeVnwVpeKcxNVGpZGLJjeZitZUQJ+7eI/i0v/q9Y/A2xPPhf5ws1h9\n00szXSH7dDsgVtr9dNgsdhi1xc7qKEMT2A4Gm0TNo4hLryQb+rA2bff5GFsr\nh7mfrdGRdYrlEMBupxPXc3+J2jYQc1b2Kxs29QOlOdtTxmmbc7dUvJg5b9eu\njk2UPnmiz6+dTCEiZtMR4jijtFO7Wlm5x+DsrZA5Vn9+vChipRVs33VjYuh3\nm64A484/khdyJi8zGb+OtUpsDAK9CFtxeSaE9ARbJSOXHEdalwvxHcMi0QRa\nY/q+4MQQrExR/m3XPBJqYJQon5SecWgQRWEbcKocqQ6caD6acRUVatIh/kMQ\nHcTMATEss1gstKZPbF5ybdx6Ykosu14LHMCLoojp4vRXOZdjXVchQQ2sE1vZ\n48dWszs5Be9Xo4h1ASUrmzgWIo/bX1Fp2yt92MsyXpnaD/zAWj47XsCQeGQj\nbfXIjrnwCX4KmvMw20kP+DW3PhlUV76+T9UDEl+2Ta6lMkp9J3lb/HOVGsJw\nqO+Z2i+RQ6217pptLaYJN+OeWhz8xfR7woTXqvAu6h6GAw75hFGfsoS+pgwp\njsuoYFAm9+6W9ezfM2dxjUG8WrUzZEwFqE0ZkcA9Q15cKb0Q8lEt38TPuu3U\nCStP\r\n=oMRk\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"2434842304094247047f67172e87691c75e0822c","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.13.2/node@v10.15.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.15.3","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.79+2434842","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.79+2434842","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.79_1555964683930_0.907433657258158","host":"s3://npm-registry-packages"}},"3.0.1-alpha.80":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.80","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.80","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"3498942a2c805d9384f2e96d543ef03a0b1b0499","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.80.tgz","fileCount":162,"integrity":"sha512-BeRSdY4yC+Z4/kWpB6ZyV3IiNt8JFBJQLYokHtrDaZhgf5dFtse+La4kpzPdyWmBrzyVUld3z9FOleMvjTODCg==","signatures":[{"sig":"MEQCIAcp4uQQYQ11Oe77Ujf2dKkarlmoupesOM0cg+3EmshBAiAESTMHnaYRtlmm56Oo/mBxFknnnUvG9Ups4N0vFenqvg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcvy7gCRA9TVsSAnZWagAAdqkP+wVwT6arOulxRW/Tm0GI\nHvuYiwYltuQzY8LnTQGz8LppVDO1Q2LqlRAVsE9IYj0oXOPK7BTeFyGRwNvG\ngMp0ChSsFjC2R1paDIvkp60VamcvSn2EMnP8qdHKK+ZQ4puEqBzxVnFDa03y\nPZDwLdndxtrBuI1R1dugYYCSFWSsE5TqvjI0CtNQNzHFyxYotBXX1pERJ9iW\nTPlYvWXX7J/QnaySx/P5EcUw2q5oTM/MtBSanOdo8+KzqPMKOmTH6B0hsJPJ\nOH0ROCd+bRxquw5MG5K6PK9pl6uPA3jYrtbTYsdVD8qGTeKS3hyD04LVPU4b\nDsuiyS3y9JEjnMlP5lwt8bPc2i2XTApfK74885N67V4IIOe0SP9lsqeNp6vz\nPA9UW98P1AMzJskvUifTigPBzkdpqA0ufiMwo0kl63WqAyt+Onrg7AwNIOd0\nse4N+bliVV4zm9b5OssFT1pDwA1uXWiXxdJLOlRl8BhT0k9UK99aCxnQSJGb\n7AA3yfm1b8UvYJBVhwiSPms9DW/sWcpqxx3DV0UIGvvFap06YDnT22v7k897\nb2HBnOkIyDz6eMVritJt7ilY5w38wvLGXMv32itSlC85Kq4WF2/nvKsxye0b\nZPahRfhd/Nm1s4X3efKRTGBzFYZf74FPZQRuV7PngpM02jHxy5qFpJK52wgW\nWuQK\r\n=h7Cy\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"319ee3f066685536a14449db1b23cdc8fdf46957","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.13.2/node@v10.15.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.15.3","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.80+319ee3f","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.80+319ee3f","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.80_1556033247593_0.3291566109039228","host":"s3://npm-registry-packages"}},"3.0.1-alpha.81":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.81","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.81","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"fa9dd087b5685efff867ad0a185c7404e38dbf59","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.81.tgz","fileCount":162,"integrity":"sha512-cVQjRGu8ygHLoMD5FJB2TwSvqHcOdV0uTxBGYR75bBKihxKyBhlKVpCfjIBjbQ9J/9x1Aby9IyScGXvioCy7YA==","signatures":[{"sig":"MEUCIQDGJENqo8LzBW2wvlQoNleC7qwyYbQmFni/Js/QCmJXRQIgfppByYXghUvQdYufLbSyR9rLwuqD84yJBBI/oiQ4tbM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcwxZjCRA9TVsSAnZWagAAsVgP/iCVvS0jrC7yJPTRB0nl\nG1bak9w+KlINlEO2xLk0Tqm296gef+cdkteZk907Kf8DAomxcS/bN2OZdkp6\nikFGxul9EG4Hf+9OGrkxzVJg0UZ2h86GOAu1Pc1++mTscvZ3lUUETdH2z9QR\n0hbDlNGYjk27GYqR0afkKRnQaO0wZdoY7eHLo3pOmn1U8cDkD3iY+ru+o1n5\nGMStFnaWO3HyMGa5H+764EmosYpWWuPwt4HeJ3KGYXSh4N/an1lmRd9E7s26\nV8gbWFUZJnITbtWF3mdH+tHl7FMCbODGb/WVlORnG+6OaM8+qRmIqx17bmHx\noWttvd6A/raHx9+OKqTZ19d7lvLPLEg4XbDfGeXxsIXGI0XjB/tbp2McmL0Z\noAsp4dpljZDelDgxyXxB1or/gvUexyaHYy4Y+W9KggIU/rKI9Tu4sTYjZNc8\n7YmnRHUXjpKDFfy3PCiYvZS9/Nhi5uHBc/v7W5H8xpWr3rue79slCwFvDUAf\nPVgONirWWhV2EhmAZW3rCiJIemtdKR3eGSrzCQZxpUUN/NaD482TL7jMV8/U\nxMEZK7yDtAexOtGBIarrcLmb3VUnzRuR/BJiM2duCdVeFxZCwUCjMTo+insG\ndd0RZ8BjNWlJTBX+bJcm+CmS7e8bk8+4pEQnAU9nOn9JekCIx2DIExyKa7lJ\nsHoL\r\n=i1jD\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"4f58087903cd54fb18aa442bb41be9311899d368","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.13.2/node@v10.15.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.15.3","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.81+4f58087","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.81+4f58087","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.81_1556289122202_0.7780525811549834","host":"s3://npm-registry-packages"}},"3.0.1-alpha.82":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.82","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.82","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"f0afcacf68de814241fc5068fecb4ef0d1ffdc45","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.82.tgz","fileCount":162,"integrity":"sha512-Q2o1MknbPW2T3qICJKkAa1ElSEusR+SqG7Eo3o3b549J3CnyaHjxmXONZ8FZ6FmUWG2DWtSdxRaKELEMqL5sWA==","signatures":[{"sig":"MEUCIQDO6Rt1uOb2TBiWnDenScFRB9nzL9YuXae95p9U9xWnvwIgJ1fsVOqWwEqO7dlc3JdbfUuiu4vOMpnor9aAnXjo5GA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcxwvGCRA9TVsSAnZWagAAe5IP/3ORDPvAVfuf4MDebHdb\nQf6olaSyUag7sbnBMAc79L5uZ2IjmMqx4qjDiDLGBwXVHDlLWjExuX6QqyAA\nAvYR9hO1XbjTDXhh6j/6HETKk2UHVfu6C88wzDE2xXMvYk3f6wOfXOhzW4m+\nJJCVMOoBh8FnK+zkoj7tyebbvz8C/U3KlcN6/45bU0XURP3kXhm1gxMuO8XA\noteheGYbjd/EVg0xw3aHxyItY/J5UtmfnH6f+titRuE2woycRhx7AV3ZjAb2\nE3XrymDWYKc1TmpeORPb00EBd0ev/n8hGAA3QBhFgmqJNZeCOjdZ0g309faG\nrgzFkyawQCPRLB58uuQ/tXtFIWL4c0gAXFoM64Ap/FoMvQzc5gW1FUuJH3tE\nUrDfer4Z4GA38cXsq+u1Q27EHI1JWyCErflGjUo/btaOLyUJ+siMoCIoTVHo\nY+fdE3qAMcWJzii70LQseOeObUkWquSRZbnOhEt+GRs9MN4VTLLlqgU8hSB+\nqwIRwnI7JRTs7iXOik56Toia22QMyQJJWYuX2Uw32oScasbtdXihgvxNfEFu\nH16mRIK2R+O7C1jtW+5kllJAj08E/RzB5oqvAPEfwopXSsF2ZWgM7TgAypoC\nCFHrgYrFCSc3ardysdauad8Mk4p2+rSegOauG06oxr/ayXwdWfJ5kunDrjMI\nkz/g\r\n=4Zjm\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"f7b6c3feb259b59e4d42e1ed7e6badd3b335b00f","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.13.2/node@v10.15.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.15.3","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.82+f7b6c3f","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.82+f7b6c3f","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.82_1556548549514_0.9717202105152796","host":"s3://npm-registry-packages"}},"3.0.1-alpha.83":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.83","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.83","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"3375a18ed0ed0d32559718d224c7b7666730e94c","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.83.tgz","fileCount":162,"integrity":"sha512-sSKnZiC363xWd6HKaavfwTThJJqTe85tqOszOBTaD0ckKxF8igK8Uoz2lEPxKGz5M2f8X6WO/AGBIdOIXkxpDg==","signatures":[{"sig":"MEQCIFHzu8jiCD0KneRdV4d6DEn0Gi8KMXiz5eH+WuS8DMoLAiATNdKsq4zi90nBYWjORNK4LNJw/MXnFrE84GQMOgkRiA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcx0JlCRA9TVsSAnZWagAAeXMQAIiCNMwSJjc7xZT3RTGR\nANuqDv+qy8EvSBcopGqqpppqCd0h0EElKggo7615DyfofxMlD8GdKQuKp+ld\njt1ptezKmZ7egcXSrDK2ir72fS9quhX+p+m8qmJD1J33OP5JFCo8f9BpxoSt\nnFpgFctb5YwTH0Of4ASxcfvC/7s047IY9DPGgH6+W9wE1zqtFBd6WVgwU5hq\nawrIRsb1V7kEPRHNyIO6nsdFZCnuYcxy8x8mAI5UggRyjA5KS5fb2zHsVLvo\nI/eUXhlyRpioV2LzQkWF53Shc29+V4eIHyR5Z07jB7uZIdzsLJAgDI8E1Nvn\naeauVIm4Loochq76HlJlWmgL65iv2KdKt5GykvwGMLvBo6wik/Rs+Gm+Ev/m\n+1le59ERo22/efusqyRgoDUgfQDD2BMtHavVMNvpOGl04ZItZ8usVKDxQWwZ\nwqkbdTL6rYh/faZUYlev3saIAe3ZcrCWJMtlioOYwIMD+z1tHvHez3Atz7YR\nsfaJHc2M/i8mxd5tQIHwO6wdJC9yvdX0nMCCTUC93PRLRaAxNUyZ3YmdZvbe\n8lgsTdGdjjExmzktKedKAO+vtdlnkfogyLvuHvsv0ybljB9SZ/NyAFA+Uuoa\nTstQDw+hmU7DMfrQ/A+zU7eQ7fDLX4SvMuhmf5WXwM/j144NMxdbzpip8wzu\n345R\r\n=Zjfa\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"200deb4988b323a17330e975c3dbaa50afc515ab","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.13.2/node@v10.15.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.15.3","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.83+200deb4","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.83+200deb4","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.83_1556562532447_0.6887629039842682","host":"s3://npm-registry-packages"}},"3.0.1-alpha.84":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.84","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.84","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"c3f189268e2fa4c65967bcd6998b101108dc5a79","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.84.tgz","fileCount":162,"integrity":"sha512-KMu13JxuMFvnuwXpTNHK1E7nDFEheuLaaO+kEEXl+odtANf+LeReFiPYdKO9sQLQlZ1fTAgXKtSxohdHyiA39g==","signatures":[{"sig":"MEYCIQC4MSNIUSRdrJ07VIojbKDs6ht+/lkZ02OnfJGnBriWhAIhAPZupFitGpX5W4Lyae5/UpQ6Xejsv7u++ydh/TD9B3l9","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcx0wsCRA9TVsSAnZWagAAHQkP/2m7gN18mGAX4ico8nzI\nfMpqm+yVDXKS4QYDUEmQG+LlnFO80A+JzRzaD0zu3yZo2YrYtXWvu7kNqiCk\nitpNkAe0HAqJShY+2QkTiTZGpAc4VrVgfoEdm81Zj5/lEOI8NAMBV3rRGamD\n5O+9f/8GGozkz4GWV0UkmzmJxrOR0ByXkXM/MOVSj9FPNxLL7x2AzLLRyJmC\neIwHHjrg1j/lzeeaZdIICMvu2HjYLyUAOpuuUdyoZ6vvyAAbd4rDKbk3MtVQ\nh3/mwU3ir1AC+Pj6gop4jgY/2TgjoiqQIn6AzEHlbOwpgECc3zW1aRSFqL0G\n5Q/I7fmNGdSsRwoz/nYT49PkV+V0cTHhlWyO5zbpN2nNIfck5txOykVZxWai\nRRWYV4XOM45rHFJLzWHnIRBC5+iM05QR1BwMAQ1xT5LURqTWddemd3XThEoJ\ngYSIs1Vgx7h2lIGcF0VGMg67d7riIEKo41znvUGxG9WYlHsseaVgon8NeMIF\np797eCD9AzoewTcEulo/0HxZ/GrigZ6cadTVgvU/Jk2GPAH7zqdANXDaLyz/\nwj0M35sznuYhjGWwsJjq2YUee0vbhQ9cJqVscT/Vci0MIIg+EFtaLcJ5RNbC\nixFc8CCTp28Ok27TWmQl9qr64MXLpwTUjrpOSdWiH9CRGqnxm0Cb3mc9b7Ji\nLxJ+\r\n=QPEq\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"e13849cf3b5a59e903e2c810a6a71bd02815dba7","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.13.2/node@v10.15.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.15.3","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.84+e13849c","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.84+e13849c","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.84_1556565035684_0.7767442082507159","host":"s3://npm-registry-packages"}},"3.0.1-alpha.85":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.85","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.85","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"00d4299172c72c4dbd89160ef11911b4bd41620c","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.85.tgz","fileCount":162,"integrity":"sha512-lLqZ4oWAsf6QD4kECDgKpaHshn/K3ZvoVmIeKMyD6QIF653ouPXhKyAPTofkm6JvzEduS3i3ex1g25lzyExcoA==","signatures":[{"sig":"MEQCIEOHCE43lGbF7xi5d+H1GAS2Us1Wa+RNcEHopj2fh62AAiBPgwoM3AnW4/9MW2yRjQ521l/SmtCi1poJOmDw7hOrmw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcx10CCRA9TVsSAnZWagAA2CMP/1aWrnZKeRN3CWLH+mAj\nWGLzNphrQMCUF2Ew9CmGjbCji+52SumUkbUrDNt3EYrj7AGYXHdhY4Op259A\nnRsYtwCA3alVarvNKZVao5JzYbAqKoxrRsH5jsHhCwan3x+Xi+7IP+aYrA6N\n1BUmzmL/YNfkbGHG/H4Hbhy4wMLuTgDyIji4JXNHROB2ZhEG3hv7HTXylGaw\nt5Y0EfC5Gy8if2ypg73omGPQo3hhXVslOIdjQ3VBHRO9lLzZ7WjJnntZ0SJN\nRizUDwDNDIunpcIg2bAJqDeXsVuGpCsWpXD5dL5BBLwg3oC4Uklm3geTfg67\nXRKYgLX+Eh9EqWbNxL2F1YQbTltxjhSOYEYUN2bWUVl8gvGPBfO82N8VxKTQ\nLr+7uIVJw1SwOx49O2tlnxqyzmJYeazKWwH/eTV4YJPSiPhkq26IANkAdgJO\nug7ydyu+4Lgzt3kPo7yo6Xfv5pU7QDvUHF2nVyAxiIdTERjC6ysunVCaF39x\nVqP8nG9ZrNOr5Fsln3aCBKHbSBb9MdX+/szNaf2a6IiGxNE08mkPLtSyRbny\nHQyKwmb/XI0tqp+NpG/dTevKL9aJmdMe1AhivL+x/CLmwlE9qhJn7jpjO425\nOn4ybYDIKiT1ZXIzx+ihAAKplqCo5aevsBAhKxfspHF9cLxp2NRdptxENMzO\nYO+y\r\n=GVtF\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"23d5d9bcaec7900150d9e45aa2566eb7f8a96713","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.13.2/node@v10.15.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.15.3","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.85+23d5d9b","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.85+23d5d9b","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.85_1556569345728_0.08587694516542022","host":"s3://npm-registry-packages"}},"3.0.1-alpha.88":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.88","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.88","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"0fa558c02553dd8bbd09ac68c5ecd3baec99a01e","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.88.tgz","fileCount":162,"integrity":"sha512-udd78ZOFX/3WUrYJk9tsQkoApfdzeiWZtKIHqmjUbCts3qYzTOmv2413d6Ipli9dJtiOkqo8bFGAlBM45IqgYA==","signatures":[{"sig":"MEQCICUrvuLupNdLymSSAywj1NEgZTiV2P7yWWih4G0fFlfoAiAenQnHD1dSZArWAt/Y3nkrJUHxMt0a4bd/MRRlBpBx4g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcyGj8CRA9TVsSAnZWagAA5TkP/iqo39aglHgEOeJHtKDq\nfgxYXWPX7UmpOTphx227N3NDYoqAwun+Uf3k2VNYxGSLuWxwmfyH4ZthFqNo\n8lgzgDz15Kg8kq+2ftUHuFHnnH0wU9GBmr6v5Vh10Pq6VJynrvwNuukNzbd8\nWg5y/aDsECxgy705QOMOK4lYsElQ4cv4i5DYJe1FJYlT0MZkLVmxngQPHQ5B\n8StIwTj8YFkUaNw8pe+NLkTRKzmeOPj4+SA0qgqGXGeRGb5+P64NsAmQe0rW\nR2/kJvgUT//rFqCCO6FTI7Sz8xgGoW4S1pPeMJRobFkBv2enViJe7gUP4mqF\nsLih6bofFG/dZcdKo+IsqkUFQKEemMpsto+lPssgI0Af75QFHfEFg0GwDvEx\nPsALigYsTs29YWkKdgGowPvlX5JQh3fUGU8UELPlgTG6iA8wJcj5HAMNzOae\nx3DvjT96Qg3hBE+FUccmPMkPx8Qhc2P3rL13YLQxKBHkot2ArWwuqiBWRgM/\nF0NyYWFj9D8FR1hE4+Y4b9VthRzbvCGWlql0DxUPFzhxrCCZs/RBE5chV64T\nava56WyA6osmq3k00NsinbQAdaaZlX+CXS9CEj/ugsn8s98/572BUMpYtc8x\n7V4OmQAbZNFpBKFFsRgzOwbL721td9aSRRUGl2MPZH0UfVeqHAdSSq4n3+73\n78ao\r\n=zKMg\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"047d28b57c9cff1de823992a885c11054c5531d3","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.13.4/node@v10.15.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.15.3","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.88+047d28b","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.88+047d28b","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.88_1556637947519_0.09859016443709989","host":"s3://npm-registry-packages"}},"3.0.1-alpha.89":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.89","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.89","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"danielclayton","email":"daniel.clayton@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"jonkoynok","email":"jon.koynok@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"6db555e10f1c498796621dc00756543e8b0381ed","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.89.tgz","fileCount":162,"integrity":"sha512-ePx1SiOhQNB3qwj6xPqRGcZ9qGfSffc5RuXINXjwPbg+am2/3DsECOyR5igO1dCFZ7Z0iCezLT0x8cZyqm9Smw==","signatures":[{"sig":"MEUCIQDWwzY0uJgIEEU02nDjlvrjKYqWTGwyhhiJy+vxruTVOQIgTWikRjSgwtCMI9JmBELzSUnEYzEBYT65mvAyU23So4U=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcyHRGCRA9TVsSAnZWagAAGjkQAIeJnZVZQdWen0+Z7cwI\nTS1irn/NSy7PMY5tWj5btYj4Izk5CONQGVHvtSiUtGKYsUG9/1NpUWya0hu5\nv2DFEvkdE1affhHxmg9sNvGcyqMVSO/Odx+NIAILZP8GK+BZTjshb4Q1c7O1\n1yryHTKdVP7Sm+KKZI0GAcjJtNe+u52dk1szZ/jbpTUDo7yTMfKX+Bls+qzl\nPfNdx+L2Iing0gQDNIynGPgUq5crsfbFFEWgECED+RV8fgyiwCQI8s87bSAr\na4bZVi4xqKnwrOod73Vbzl0zSk66vHjOO6uxzHcUdbJiittb3G8hRfESuWn5\nmvuC0t5xnl0Dj+jppnJtZMKLZf9r32lmPa6O8or44YSK6FMSiQ4X6O3sVY+P\nm1vXgWKlkx5uDESCeuUkfBxvfM73iBYA7q0dn265oO3NNcV+SYOw8O9n2G74\ng9Tx42WjSdgCt3h6k+fUNTt3Vh/Y/DQ5GIf5ykNgyc3bL7FeWowW29GaxVPK\n5CQiP1cCdROGFePLTs4+x11f+7tm5ksebE6qt00aop96jGBxTrNDtvF6jZ+y\nV/sQtOkAbibjnTn+dgKJA4iEYGKXtv5qMwE5xHQfHKSBgp9ZRuwQLjcGY4OI\nmyHU+pPczdin19tsv/QAKi7awms/QBLgAHICxWa07C4nlrz7VP5/NvbbpQsz\nZaIb\r\n=XcPh\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"6afdf0b7e03ba0a3aa31f632fe0956fe9ffb6944","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.13.4/node@v10.15.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.15.3","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.89+6afdf0b","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.89+6afdf0b","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.89_1556640837739_0.8589382953905857","host":"s3://npm-registry-packages"}},"3.0.1-alpha.90":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.90","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.90","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"8922aa14e5a6324f0a84c14aa11ba70758096595","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.90.tgz","fileCount":162,"integrity":"sha512-ExcEzGDNeVv8IuVbxloxBxGYZkzyViyYGy/WzSoH3x68G1fr96NKiw+9BRq0O1Mk6eT+v0D+U4J+XQslQRyXCQ==","signatures":[{"sig":"MEUCIQCU+Udjq8dzLRS7C3ON3RzLEDu7Z/NS2OywfrsKMeRbEwIgX3HxGexzI10iEk2o0lLWyQDYzapH++KO9WqVbg7VLGQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcyI8JCRA9TVsSAnZWagAARDQP/139Fq7uc9gGxmrh/Awr\n/drlZ++tdjyXxxwWWSeD4ZU2UjEK1jIDy6DkKycaePSPtgBRZK6VGpWvrgVA\nHO2mxjrMwQKBt8mlbCFA6tgKaYaV2JFq87MW2WMSaDMWhVGITdJjXLadRlXu\nf/tz4RvIO5ZS1iXFUToQ3Tud8o55qSHTpjN/Y92C3aneiKvTVi0FxfTEFWyz\nmVwwFB4Qhnscn3P7w71vfKvVhb8+weBIgmk/siTTkGzpDpJx1nqWo5bpO+Pj\nFFG3yFeSy/MuOXFCc3Q9mAsGxsMwggiHmJhxzwnRhcxx6GhDy8ne3hTsyXwO\niuqetd+wipaJxmhdJtvaLPKPaKWV1N8LPexZp1UoWxguGWlmoPAZsy4zB6ie\nhINpyouLUsxGE1oVv2oL7JEEmsLy6QTaisDJ5qyVfjvk1BI/JBn2eXU7VYqh\n47ybX3JFcEuSIxiWRcy88BN5AYw8YuhPakkPEkv0xon3TVMhr86M8bYjbOwB\nMpjlU9ER0KcG0cX/95N5PVBEiCXOWJ2ab0PsSYzXz9MNZvHGvt4nyucIkceQ\nlmfHTMKa8sUSGy0aYfBl6Z9xWTvRde4rD0EtVzfks5QYVFty7+np501vLR9A\n5+ToRH52OphBWHhQ3T2MrvsS2UCgo/HW74rpcU1J2TAa/eYB8+R3pr8+QvcD\n1ysx\r\n=wj6s\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"886604cb4b1ade681a420ec79ac2a148bc7a983e","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.13.4/node@v10.15.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.15.3","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.90+886604c","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.90+886604c","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.90_1556647689207_0.5323285268368185","host":"s3://npm-registry-packages"}},"3.0.1-alpha.91":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.91","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.91","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"ce870d0c3b7945bc48f41d967f856fed4a2c7e87","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.91.tgz","fileCount":162,"integrity":"sha512-C7S8HnWB/I4QqpN6B0vpzSNwSXon5/WbWHe8MMWyytqLULajG95nb+4dSay4VG/jZ+W/qoM6FA0JrnUpVv8Qhg==","signatures":[{"sig":"MEUCIHRbj9YEaCdKXaI/jTrQEVzW6vcAaMvci1C3BHlDXQBSAiEAp2dT0XRrVxPIP5zKh7Ilm/VEzOr77yMsY5TZNL7lhpA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcyJV4CRA9TVsSAnZWagAAxQEP/Rr2VIs/SfCwMn5lNYz8\njTdwFtHk4Tz9BEioEtJJ3jFSWqkZX9As8EcmJirTLWa5vG3/tPvMWWi82iM+\nMzwDpZhtbvrs8INlZbTBNgSEepqK7Vccv/HOLjvNXuBa8f17wythYnl7PfgF\noHoDcYFK0VEZydIY0g7hJaw56Ynb7mUam+0W1GaNrU0OZRQQ0TvCCsC9Ovwd\nt27w8O5ud8xwGjjmeC67C3jUexCXAEjfZsnF43xZIlqSDE2nOlyIzv/STNFV\nrxT2xk9BLN8K1+7Elz5ASotPT7M3UE224RofniDm/+Dm+QtUStYNEA14ykgX\ntuxOjep1yAEnqRQw3Z7FxgUGrUo2S1h7C1K7ZVqeLFk32X8NK9P3Ek+Etd/W\nAYJjT7JEfUjQrePOSAtUrRIwKw3kbtm3228ZDTZxEWyKvYZeQfq27pQq5d1p\nY+nQAdgXIbbkFrpVjFr3XXShMYwc5VLa3tl7nHNhkFTt1HQKl3uh+mwQUWR/\nvBGeo5g0aSrdj5B07RTfts7LDQX5fZ1HpTgyHOxgJroc0//lfDFm8W8/JAPA\nQl8sapapLyQVbKesq37WfxU5jJkd0ZmtQzWIrHmqBX6C7Wl1eyBiDLprcRYc\nt1CZ632iHntwzy81HB2FAFJJHFfF/E3yx8Ge7UCmyk0p4xKoshyCC+DWCcVV\nTtJS\r\n=0odw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"4a701a04554db0b410aefabe5422e11eb96948aa","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.13.4/node@v10.15.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.15.3","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.91+4a701a0","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.91+4a701a0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.91_1556649335285_0.4077436257561402","host":"s3://npm-registry-packages"}},"3.0.1-alpha.92":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.92","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.92","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"bubbasdad","email":"david.rhodes@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"89eb4d62973f2599ed05eb8ed9f780d2a820a663","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.92.tgz","fileCount":162,"integrity":"sha512-TeDrwiOOp6ln07a3Gl4GhpPXucpeLiw5vLAtJtoay1cAg60apTqEDhzuV4GeUcATynWkNPXJcrDbgt4lZQUGig==","signatures":[{"sig":"MEUCIQDjZ0uVQxLjIYfAlPPwMfyu6G7U7TwzXHhG/J5BrWDkpQIgQxCt3g1lKlWZCp7CHo05Cz2Br654Xp8b1LnEeOZZWY8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcyJ/cCRA9TVsSAnZWagAArc8P/AqfObGqogCgQ/WFdhk3\niudzRQaMPz2+e8tzPjdNU26n+NvQiLthBYvuUl/DIWdd7NTe8Bn6NPn1mJf7\nacDtG6gX0dCPdAWhWAO2GbMymJpWfEUMUrbKtY8sdb9ZuFjJmdJx43MwN560\nD6ipnEKR+qQWdfIkA4/5s+XoI2LxvKx29XhFohqWkvokIzYIuDc+aytzZ3Qx\nm0ZC15tTSR9gXyBxOFH8J7lFo30ZFuDi9XPMW8KGsebZbaaovXjZazl1C3VN\nBTFgBYvmUJsF5qhDfCJ15bHSpzxCioDLSj+9pkvaXTbydwPif2lBvaDL4OHr\nTbO3J++SCOWVVp+9idyhJlMygJUpNVfaBpiuCYNJP1EJeVz/GwJOmfxvhXE4\n7C/4uCRpybobTw/2gjwbjYKUrxMXib1eNIZRn3WtSRcyw9bxl/BUXxEft5AU\na+l2XhT2eGZtfCYWLPLdoHDuhPqO8mQN4YNztWVJA4v7Ey/6SfvfC1lJ8tm8\napCfbM0U/mJGeDhv0j/YzbQV3Ep4jsmSWR/eYVkGCpuWgw2D9UmURup/P1Rx\nzq64LIFNDSRNGvtvlFS6bp1SgTvqWSDFDWFbcmoIHSUBk6U5lgMsyHQhUO5q\nbY8IRC2nl9mLxyUKRxWHlJK7o/Ap/sV3a2o6WguYTb2lgVCI5jJs9UvD1+pm\nY8oq\r\n=AfIa\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"e6b5506d627f8779f2ae340415e37e035c7ba9e8","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.13.4/node@v10.15.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.15.3","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.92+e6b5506","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.92+e6b5506","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.92_1556651995281_0.4492082955996337","host":"s3://npm-registry-packages"}},"3.0.1-alpha.93":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.93","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.93","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"8d25415f473b52b21a7c474609c6cd66cf2126e0","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.93.tgz","fileCount":162,"integrity":"sha512-f8qb5Mae+6WU7Mh2k4VHKCqtK1jXPAa137sfyhXBnwd1lh99G1Eb0KHjo9lkdAl8decrLJzya0nAtkXW1KsbYA==","signatures":[{"sig":"MEYCIQCQTiV8A5gvAQMGQ8hJBg1Hjv6zNoubuYgjFEg/8YaMKAIhALE9AJRCzf8diBO/mxSiz/sA72wjKbBtGNbHqsOqdW4x","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc2tVJCRA9TVsSAnZWagAAlZEP/R1L6mWskPU9ThFvNKjZ\nI5bNyOVLw/R9k1G8mkdWYfArwnGX2lg/+GFcKWAGl4njdvijhLEyf97ZDPsX\nG5KftB/goYLY4xCzqw07x3BHzfiro/uP3BRIHgjbpmUr6pCvtt1GD0IqDB5Q\njhqTZ173qzFImUg7dOypyTfokWj9N03vIEerVjfqqd82mfZ6giIVKyt8g2Va\nAPYvfrsGV0HrA4cHRvE4H2C6oqKdhjg68vMjK4shp7C/MMNJjlyhrjtmJpFP\nKDW9gMxyzVLu4bHSNxL4RwghzkeUJwt/KNP2KAT1ImKKgkpJsHqP1LUFEZg+\nMxpr1i1dioJOrw3CefzYgfbv6IOCO+lOtQNFBjgfHub9qNlZX8/lVs1Hl4WH\n4PN0PEOmAS/BBGVK7bbfF+hNiOGcdobm7/b6Tq8qyvJuWRBNVc+e8d8MCpAb\nekrTgftfCADQMngOnkVPVBboDVClPNgEAkngfXx8M6JWQBk7FsbPR2NZuhiW\nlBopbJBVMliSkyakHof/Z52vrljbU1Tam1w9lrSArSqCC/W87qlRWl3lISSi\nqsfkBsqdb4/8fp+V43iG9h6/FSk/ld9YwEi/GcmIC0z7B5ULJGhbSBpHSRSv\nGhEvldJ5AyqG0rH8ekYFzkdz4C9u223hJE1eOGvf6xITg9TU8HsEjEChZaso\nSTje\r\n=5zBO\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"b1fbccc7576803541b678fdc18c2543c0d5a233d","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.13.4/node@v10.15.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.15.3","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.93+b1fbccc","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.93+b1fbccc","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.93_1557845320829_0.3457850037973438","host":"s3://npm-registry-packages"}},"3.0.1-alpha.94":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.94","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.94","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jackwork","email":"John.Workmeister@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"6bc0a0a092bdb17e9a636409d1633b0bd975f6d5","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.94.tgz","fileCount":162,"integrity":"sha512-4DQfI51cfQhYz41/9ok7oT4z00q7HPrACLs0iewYV/bQ9w2Ui0cH05M8u5adF4AzADy6cKmLPQ/dmyNfJPHLJw==","signatures":[{"sig":"MEUCIQCsE5KkuU7WmXB3Usy1LLSFnM0JvOmpsFA/SHTWYa4NMgIgNJb9noMHdg4mhNsmTwiVx5mOAyBmgRKvgr+JQHtSG+c=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc4vObCRA9TVsSAnZWagAAD9YP/1Y7Rp51/h4TQrtSpQ+/\nk3NKDZoFDLeG2+6sNwr3aZD6ikaNnQMsU/wOk7qV5Eg0LY2UL0DuxYvV6Au9\nvsvXoVtwX1Arezeq7M6Pokhpp1CLiW5NEKy2B+SsWoD6XvMNEjUS74AhPVQ7\n9JWzUmWtC4XXJfGduIy3c0kkZ/Y/nppBEVSyJUVgbcgYxVeRKWxkqn7CmNbx\naTzywJwn/SMdFTSMkzMJumivcwk1kJB7l6rMERRKI9CbGPr+0IxOzdPDC1TL\nxY8LO06YSoEkMub+yNf5RXBhz288DMyemd3LlAMp3StqPgSrzxdlGQ3hepdU\ntJfkL25CxP5qe+O1wiqNZhLIy+aJzSm7D2KTgaGZAJgImeaqYChwIIY94dEP\nxbDMmzvByOaOZPqSzAhony2N3/QSmksdRap6ZRAsSdm1hyq0JdeomD3R0GZo\n++dqYt9BwiTWhSVyuYQNXdw63PPC1HhKXv7UF6ido4UZurxp8wQm1eZ/EJkl\nYsJaEj/j2CK8aB1JLxPHc2oU0hdTciALbr3gthjXZqKHfji6dw7PUk0P5aUq\n0DQCXZtDSy5rJPYdtpKdXdfZH79MTtYUVDo9cApRg2Ow+4OKl6T/iqF6Gl3p\n1r0eBsLF2Vi1K+abOr7X6hhR6AYYyo8kkOWlb3WoNqR+UstwRENmsPTEL/uW\nblAy\r\n=fmxv\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"c5bf0f8b0492236a208849326137b0d26a670486","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.14.1/node@v10.15.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.15.3","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.94+c5bf0f8","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.94+c5bf0f8","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.94_1558377371144_0.22466608406148203","host":"s3://npm-registry-packages"}},"3.0.1-alpha.95":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.95","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.95","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"06784ca2f796f807c1d07e8af697ee2227dc96f1","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.95.tgz","fileCount":162,"integrity":"sha512-N+Bm+cCyLpGMvnSTbyTeayAWI+TtpfCS5XI/rb39Donn24tgrxGGSfYB7ixGXckFCUT7nLTQvViZOO5hYsF/FA==","signatures":[{"sig":"MEYCIQCDfHQ7+Q1cgFRGguj1zKMfI+LWpCPnquEODx75Hzmj/wIhANWB2BSaDyZKhZw7oWAbG7e0SMHuTVn57KrAiTBrvCvI","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc7UvECRA9TVsSAnZWagAA6a4P/1jsiTrJ/9tlVIbu+7NF\n9lyFy/Xyt14qsqSBspxdP8cBxxpiwapSy31MafQjVZBVlZLbVVlfHT/emkKF\n08YDyrFIrAoNa/g4Rj6v/dG0qDVlHfHNYATcT1tckgJ3t1uD2nab2vBurlwh\n1n5Jet8dKQUQ5jqnmWzjStvz2TAEY6L6SBHR72HzVowiIGcfbW8ybuGZjct/\n1WfgT/Q5BUgjE8agfDWvZPi+oZNgXF0gnHgpQdpMh4COFfxc07CcMuTTRC+t\nYgnaj9G4YsF+kR+gGqjYZak8Tw3PtpmWGcu0hyxGKr91POPCv4BphoZerDTA\nRV1i1c6xwltQowD7BWC30QTmwNiUAcBDmkehm5+tvCUwuMPPn1prZZnM3tPw\nddYGQiP4CYMxNK6Y7C49OrjzbWVhrWOyTSN8PHaKD1jZc4eq+iKGroFiWP36\nb8PJkXhjmAHiRJLCkV/Y8oStudobyi40wLakKPS2GaVEpbBFBgcfpA8WtgNp\ngSTSpCatoVYs9Z4FLAP6+aVMNLwTnsiDa6rKuLFjxVURYuWGzbZktIEhwxri\n7M9LWUk3ldRfhGAJaTk7VlRdkCXBe1FUDMwYew9wKT4dSfvprxoD9+DBZme8\n8B119S3BmtaGZYQf4gg6IUOSCxFfnEnuCv5ukgMy8fH7IO0FOtRrpgPzL2EY\ngK79\r\n=XBto\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"23430f87b7a8729f932ea72af50def49ce643fd3","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.14.1/node@v10.15.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.15.3","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.95+23430f8","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.95+23430f8","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.95_1559055299529_0.2303156992168609","host":"s3://npm-registry-packages"}},"3.0.1-alpha.96":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.96","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.96","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"0b56af5fa317ea1345e4d51a28c1f87f9ea7c1d8","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.96.tgz","fileCount":162,"integrity":"sha512-sdzpaPJevpu4rKd0NtdYK5IspFWRqkFaxDV76RoJshlhuIrAhJFIrXnSs4eo2NI2Lu1SJzlt1SNGEpxIOM1pBg==","signatures":[{"sig":"MEQCIH98Q5MnYSpbfL0iIIRBF/nVSgvkxpl9OOLGolFUjHzGAiBtMqI6YPdEycLu0mTG8xkksaeD72luYE0yyS6xDvawQg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc7peCCRA9TVsSAnZWagAAUiMP/2bQOfcAdihYvX4yKjg4\nk1i4CvzvYg7bYfRubDodiQuIrvd+qYXC6dvc3VK9VPWiuTePgxL1jP/PjTuZ\n1gdYwTqJZwmWsdQ+U9zziSwwMmvOlYSgM4JjEFFGlzMv9wMxrjfvd9K3T9hP\nARj1qnLK9mTRf/vxjSf1GXw2TkB6sWMilfCy75bEtTmh4dPxzMOceEIdKlO+\nXqGSE6XkKrD/6HYB93pgslZccnS5RS7l1J0ijsqlYCk8kqWM4Sh62p7hPO+f\nqqlCqSQ8jdzE1s9OYNtMtRm/kAYaB6hfO1ctd7mog6Unzlfvm5m6FEGs3G3j\nCFaaImtzTOu4g+C6JADDbmmdx1D5p8WlQSq0XbZTjUJ6EScyzUG1D1BzGtBh\noL1S6SccAbn1h2rz5kUNNandGRL4AhKvVIMUECAW/kaJAsmuMf3hIN9cIETP\n27utcAbrhGdEC3WNrWmPoxx3VWHs1kZcuHAZfjeijYNnZEOrAd2b8H57tK5d\n0Qrqt0h7GbWk9RDOU2SuCjL77Nfu/usfOY6IXtHqQMj/zhvIuZcu0p7cG0xl\niaD6LWAdxYF2RaMQuffO1kkcQuhQZIE7dbMdSyIVFRtuDq2Q8yXyt5EZ08WZ\ny1lSQCE5jq7q9M8hJDj7U35CcZRhra6UnvuIKcyob1/kV66Ux3msl4Nb6REW\nTTu/\r\n=I6NN\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"acaf8d1d447d5ef646e3e51aef0131a45a23a38a","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.14.1/node@v10.16.0+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.16.0","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.96+acaf8d1","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.96+acaf8d1","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.96_1559140225757_0.20472293826841925","host":"s3://npm-registry-packages"}},"3.0.1-alpha.102":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.102","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.102","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"3f28285cddaac97c602334108d49ac54b37c959e","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.102.tgz","fileCount":162,"integrity":"sha512-hcyNWGJR2S/4j9XBNKd91aI8dkSZVzCErol1Cw+zWuxPkYiNFtGxJJjo+GyuEufGvGgzZc7xzH+RUnV6dt+t/g==","signatures":[{"sig":"MEUCIAk35fCXVM7Z7D6fCsGHNSjyN1sa++SKsF/wtVtLrh0SAiEAns8XjhiI8hZ3kyHh5uiGqFoxKNuMxv9S0X/t0l6rF0E=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356443,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc7vztCRA9TVsSAnZWagAAejMP/iRT0+/XIMZXwMImY7MP\n/Hf8jPOcaDKGRymfnOHSn5mREYJPlROgH9DFB0qLxfUvJylUZ/+xIX8DG2/w\nDsBQYT5cYJCmL+APBmh1COE7R2xKgwhp08EM/82gs2DB4lkwSuOzFU3v5hi7\n4EJSqmjb32SL0zu9KkDloMwdR7UvxWbvy1aDnTgUgyxLYigX3zRIj3/LSAdQ\nNyg6/h/7xSsucRepdH39OxYcpmCqc3uIE5dbO0XgKJ5LneChjhCQUU9feWoo\nJYJ5d1VH2hP8C+yTxDOhTLhQySxYm460un3ledB7fEUFS6DkuxbsyCHYL2K0\nJF5v3ah2FKNdvCUawMMisAkrx+Px1BoQWv+F53ibprfWLWmfFAQggIZ0cuT9\nJWBEmIHZXxBGluvGUBqEdIOspnrzjYVt11jTUrut/x5GSlxmFCijvRG+kzVn\n7ZE7/h7+h3iNdu09m3CUscxMs9JbYlwcErGuDe2/I1kmF4IbZRQTvxakICVJ\nSuVnuu0SDQdjykbGvImSZQtH12QIwzl/Nd2INOIO0EsnTQXnAifC9D0TKAMh\nM5Y5gN7QLeHJjzTdl3fUE/sxK0y1hRsE80JL+bYNHSilKrczBqO/tq26jmm4\nyB2HxsjUqcYF/93jFx9idAsbeEnBr9bwBq1sZ3mmJk/y1DiLjINaidszdiUm\nwasP\r\n=a8cW\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"f79f8e1e589a6ce60803b5cff37568dc824fda20","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.14.1/node@v10.16.0+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.16.0","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.102+f79f8e1","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.102+f79f8e1","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.102_1559166188536_0.13995166740309806","host":"s3://npm-registry-packages"}},"3.0.1-alpha.103":{"name":"@brandingbrand/fsengage","version":"3.0.1-alpha.103","license":"MIT","_id":"@brandingbrand/fsengage@3.0.1-alpha.103","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"e5a47e31e2228196f48f1eb5db7bcdc55abb5154","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.0.1-alpha.103.tgz","fileCount":162,"integrity":"sha512-+KNrspkiTbfbOOv7jx4emZ6MbsP0/WPQxi6EbQtFTX/F8BPrYzT9CnMwFdkUIcQUGbmmc1VNIVZc1XjLsI2oeA==","signatures":[{"sig":"MEQCIAl8DyzWLlZhP9lojRu659Zi1NFbvsHUoM+h55bJhBcGAiAKrsUyJKHYkkoQ3sc4bDQizURw0UgSFibQQ4GCDpXhDw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356443,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc8Ys1CRA9TVsSAnZWagAApV4P/2ZOw5s8b/Ho1ATnaFxR\nIZvgKZacsM1s+0s3wVNgxUMB6A5DN9wvDvXBqnOdtbt8CRlgWRdSkLrCys8G\n6ZrfmpP8DtfiByfDjZJvcYXCb8HPm+R7I8c6NgEDdxy29mTLtcB3HhFvVDoo\n3jOZTwyCYyjTw5wlgC36P4ZD1Y8LlCNhcrStglsLR4r9u67E8fiI9+wPyiqu\nFTvG9a6WR7qQvrbn0+fhkvwtYo0r7qErq3Aol8iWTDGrOJ+FWn4PdEL8101a\nb/eAg5GNTAV5w0fWlBL3ov/7MSME4TlVc9UlY3eTzlFw34X1E8OciESB9mjs\nMIhdGdkrgXXFTo5uLNAqBZAObhd8YKarFdWNvi6ViZIZ0doY+kltxq0KrW0J\nHTaHlmiyLHd1E4rEWxzitud0soJRdU5F04FWMNJrdK/mlvkEH9zITSgnR374\nfabTVtcmrM5KPwF2QTl4M06i3fbW2st8W6Fs/v7cgV4sxUwViKipojEnNLgq\nQKQQjgSP+fOOXBnDZH1S/K7jv9u4t/an/2pOBLfTT5XCp4eb5bNNXZzNnHm5\ntfDRmYMD2D0uR8Od/JHCueSTN28QvKbOlia0428bL5xosD0BolMKO11VAGaM\nwvh7h7D8WaPAmLd2svxZESEgKYVa92KxnG7soZWxE851/wh9B3rs7xy51Ehx\nTvkT\r\n=b3Rk\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"4e7a55477c930ddf7c0cb69eb424f69aabd419c0","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.14.1/node@v10.16.0+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.16.0","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.0.1-alpha.103+4e7a554","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.0.1-alpha.103+4e7a554","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.0.1-alpha.103_1559333684814_0.5224596590156245","host":"s3://npm-registry-packages"}},"3.1.0":{"name":"@brandingbrand/fsengage","version":"3.1.0","license":"MIT","_id":"@brandingbrand/fsengage@3.1.0","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"be062a70990e15e2ccbb0796bb8ff61705fdc33a","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.1.0.tgz","fileCount":162,"integrity":"sha512-GQY2jI9SC6ivlZnC0a2UmVTGII/b90SSlJEijz84pHYEeM4hL1CCh8WDS9yKsACqlGSkBJy9LFgB+H/kNpuQfg==","signatures":[{"sig":"MEUCIQDndCdh2TE65hGcCG7p/ccW4qMlLlmcs1FxiojXbF29iAIgY0kqBp6QH+TF1jyUu/p6jWkO1ZbwcqTykvbsXzYrhA8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356551,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc9TxuCRA9TVsSAnZWagAAywsP/37zd4vXWjvtO006b3gN\nTLo2/SXHhnSjY3XEsLJ4xBuVus6cdoH+Ohn1pMkctVqvJ21CbTbiFKb56aF3\nCY4YdhiIN3L3e5SoxskG77Q+M3zNFzIPMdvXuZMJTwZGVnSG7Ejm7wCc0gD1\nR3Vw1qa5zpB7W4EaoWfz8h6FnYZ4SuKKuAc2HSwYLHrhHzsIO466Wzb/7s0n\nkjbrvynz+m9Rl8WfjBxtT2WIZuEOVCnzeiHGSJ14jftHtnY1Wx+jh8t0fDkf\n+XcXwTzkBguuIlO6s2DGZtEDlkvE16HRbtdgnT6zLUlg5vUaWphPl1M0CMBV\nNT+dMYrV06aMhRtWSLH/QsflTpv75G8hOfd4Cv6ZUsUtfWy5JOJoRfZv+agv\nt5feN8ZkhGtICzT1pOO/UkD0B4QfF0LriFH5u59MytZZDop3mmqWaNHEP+8z\n6jBdROx1yK2KFC38g7l9dCYe3j0TG9TOeI/uHKPKHKKOUE/hsnFMaSrLsYUe\nirCfYBhwmnp29jNEXGdxj/OpJ6gubrv3qIa35Y0fTuqfqF279fHSovZA4FXg\nVyIOduhewWgSfoBA/y4IhHyvtjzlvQ58ztdIJt3Qu/fS1sRKJvtcSAIyCQhO\njysj3mhQfRY5qG8AQUlOncL4MImDytijHc0ZuTHkydfIl6stYyHdz8qyd64Z\nQmrn\r\n=ISWp\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"bfb0180b5ed5497d950ae3d5d440052d956a41ac","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.14.1/node@v8.15.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"8.15.0","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"^3.1.0","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"^3.1.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.1.0_1559575661440_0.7338097346930583","host":"s3://npm-registry-packages"}},"3.1.1-alpha.0":{"name":"@brandingbrand/fsengage","version":"3.1.1-alpha.0","license":"MIT","_id":"@brandingbrand/fsengage@3.1.1-alpha.0","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"f8e09ef44f194ae10ec9ef2fc8e1fce2ffb298b7","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.1.1-alpha.0.tgz","fileCount":162,"integrity":"sha512-NKw0JrEBM4Nj5as1mfknXjoER3mkYzqR9YPJKn2Xl1mVTo3b6Gqu8UR6iofiJUg0iZ+/W0yAx4jBXYmKn7VLlA==","signatures":[{"sig":"MEQCIGnumq+WZLFIsY7eE7bQD7QFiw7RDXMb/lDD7++lVsu+AiBPH/E/GkK1XE8fevS1q093k7Dl1LDDF8mg7HWGsLEr6w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356597,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc9UIpCRA9TVsSAnZWagAA3fQP/jsdqCf2CyYzlVepyuQc\nx8qYZKkbBksIP76chqEpHVDb/tvjIOjmigU7wqFSuCMW3yV+OD9MW3sH6ezr\nFzETJq18GYIcEa7iVdxxwk3Pqw8PUT22kXjpWj6yMEfE3Uxsl8ZimBXU5D74\n1xq7fhMKziuNGIb+AOEiQfWxVgWq4Z4N1QqWDOhIYLjpWExoVZ/P5RrZxEN7\nL4mc+YPe2jdrJmzgjDo6V1JdCc22VSmlvKv+cIRSKITb85BO2yO4rb2EC1J9\n6RLmR9cpOFN2tK+8yQXvlWNThsBd+UB4dTlfcXx8fak4idvxgJtJh6mq/m6x\n5Pc0axq6bVo69Ybqf7/+FKmx+Fuqxr9HP3R7VDXMOU4WUoCydUOdd+ifsJx7\nTvxK8o0RKXADGLEv5pjq8EVUDN2/Kq6l/mmnVq3QBMiCzTrR/kva2ty9Dal3\nIVqhtGNvPCkP3F2uTMb7TThLNofrh20XMulpA+3VYFeE8JWYeGJK1Dz+K2QC\nJmpGlqXlBaEsorwqouoD1wJrmTRJkI3e2WvHJhj1nF9fKOkU6uJbv8gYfKRP\nAurd+4sKG6viM5tOj/KL+bCKFaKefMEHgd4h3IBNESZaH1IxD0TuYlVgp+a8\nUkqinUR8YwQ+w3P0LFF0a4RGHtnLLo+sVjjEG4sRBbZ/NkNHwtn1KscZTbK7\nZ+wo\r\n=Rsqk\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"bfb0180b5ed5497d950ae3d5d440052d956a41ac","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.14.1/node@v10.16.0+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.16.0","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"3.1.1-alpha.0+bfb0180","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.1.1-alpha.0+bfb0180","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.1.1-alpha.0_1559577128961_0.07742441237659281","host":"s3://npm-registry-packages"}},"3.1.1":{"name":"@brandingbrand/fsengage","version":"3.1.1","license":"MIT","_id":"@brandingbrand/fsengage@3.1.1","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"justinkendler","email":"justin@justinendler.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"c47f38ab8ce7833e3f92a3237c8506e5f22ddde6","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.1.1.tgz","fileCount":162,"integrity":"sha512-UBzREsffP7NyVr2rmuPZ4zarN4Y1d3nFPpUMd2ALXNMUsELUKDn8UhBfTIulqvN/DlmZ2QSSDdJDY2Vf0iv7EQ==","signatures":[{"sig":"MEQCIDUvLg7vwzWyEakHF7/WFv+pDq1K/68t72E6unFzYBjMAiAjHCXAEsZl/XohqPxmqvBxWj/leE/rcJx4CDptD/wzpg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":356712,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc9rB+CRA9TVsSAnZWagAAETgP/25WL5AJonCQuHIAX+60\nKxEe4M8H569w+ppCsrRfMGHxk7igf0UcQ5sZch/F4EXHkJODlAQWA3A8TTUr\nncFpgRqgiE23LiNi102JlJwTL+D5cu3YzzHqkhiZdjbZaahJW3PyR83aYGxC\njGbravTNSTGMAGJoIMWKFFFPfCoJA3JySumh2oxJfe6JM3zuUAy7Q8EmxdTy\nNNtl09XwfGB5fskZJPxZzh64atg2RIBGfT2k4otHyqNKSvjgXSYTCr11I09o\nSrRCfi4Pq7xPGeUo2Vu7ApCXKpaiVsk46vl1zQFa0J1tvmbm2ggHF1bKYtP3\nvr2Anqs0DiKzpR3bzFw/1AVxtVB7J2bPBAMFNpx+ry+02m2q0hWap6yA3Q26\ntIAH3Vl3zuhjYxd2vSifAEImYiGC1Cb1qYVB5O/UE14B24rQWrj81lW30XUy\nIHp1lVwW0tsFK8S4ia+7tXFsYxxolJkX9t72sjmefX2Z8bGVqFi8ffod6MWG\nqJStb2LShfFcYPf/aTPpcAo98GbxTs7QFLwe5HsjTqq4hVg/CYmz3DwP4rp/\n2mljiV0Sas3nFDn2t9oDe4UCxmbsfKwnvYuz6py8Xq7fpHoBPHSeQHcv/5i2\n86/9i7S5QNdXDbyttxtQ2MUXWihNwhVChdJrmklrmSecgoNUnaxDdMbyWA2D\ni8nL\r\n=kG5S\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"c45e39115bfba1945f1ef71badd3bc792491d989","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.14.1/node@v8.15.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"8.15.0","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"^3.1.1","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"^3.1.1","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.1.1_1559670909375_0.7301030686036174","host":"s3://npm-registry-packages"}},"3.2.0":{"name":"@brandingbrand/fsengage","version":"3.2.0","license":"MIT","_id":"@brandingbrand/fsengage@3.2.0","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lcouto","email":"couto.lorenzo@gmail.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"aa51f2b9bcc9b09e86e13b131c2cfbe94acdc88c","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.2.0.tgz","fileCount":162,"integrity":"sha512-7Utpjiq6rv5L6X/ZGgRQxhcmSSPNB0xYt9YvZ7lzbMVlZa8Ez6i6JFK5vlynyFP1zQ3b1hcuihIKPErvr8DEpg==","signatures":[{"sig":"MEUCIQCyEUWukHJEOKuFldn4pwzG78/Ynv0pPkBxQGLIHQgSvQIgb9F9CnDZolcRHgQGbjTqbwdomTRmrS/3LQU8DxQEiGs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":358611,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdHNCSCRA9TVsSAnZWagAAunIP/0G2vZuvT1O/VbKzpK4+\nCVR+92P74m7JzIqGSaxIB5WbLHeWwSAk3+m+3qFAlp9BkjOGu7bd51S9OboD\noH8ms3Ep4iM3z95v4acqVHj+EJtNOFFtSbcGMJsKgGldQAwRXab4U7PCKcyG\nCoPxxlbjZcH3TiShjwe+FcB43/AdFOG1zgkyVG8iqsjITUcCR/yc/AtKD/GY\nq9tNa5LwxQVFvcaV9TF0qvsKNUyFOAIP3yaCuBJDqhWswtHsLChMf++aHFcb\n8SINyfbk0YbIRSr1hQMWggf+AkNjFi26sMTmvg0cbcbhBqNFvKLWQt0r3Ne/\nHqVyKzumN0DGt+IMzydMz709E1EcbdSmuZajQfsS5eTfkUc2+nQq0rmHNedo\nJL0RV/22zAPbIv2gjgWpRiKfArde10ulx31/hWwLdEoxaPgsYRmB/NH78SNh\nAV2++7QhVB6N7ZqCY22U9wf8l2T+00jinuO74QEBIM2zcKAKRdVqEnk1+qMe\n+4leJzZtdY9zIzhgqtD+9cvqXe3V8lcxp1uTTEVbNRa8faCDIRI5ThJfsPHQ\naG029bdQ+puRC0G5N4y76LO0pNnIE0IcBMlmjctBh0yex+jEKHWxVwBQTCZN\nICsmzn3kZNfrNDCwL2S6yt8Lus9e/uVCsMWdcycAuWV5p40wPv6RJRu8EPU5\nlXvb\r\n=nAuG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"fad7e6a5d28d39bad105bd9ae304ad32e3526ccd","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.15.0/node@v8.15.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"8.15.0","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"^3.2.0","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"^3.2.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.2.0_1562169489454_0.5575023273627007","host":"s3://npm-registry-packages"}},"4.0.0-alpha.0":{"name":"@brandingbrand/fsengage","version":"4.0.0-alpha.0","license":"MIT","_id":"@brandingbrand/fsengage@4.0.0-alpha.0","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lcouto","email":"couto.lorenzo@gmail.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"c0bea2b076bfbbf26e97af4d74ba3cc909f26db8","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-4.0.0-alpha.0.tgz","fileCount":162,"integrity":"sha512-rlbSfkpMsUh5ZWVXFOXFRbMufKhbNE+15uG1h4yNdUejlXFA/4UUD2FTu8O0DNIxTPv1n1rSHG3PY1WV34+zZQ==","signatures":[{"sig":"MEUCIGR4k85oMAmyXhMi1n2Js5EsGZ7KC8b8UG9qEITqsp3xAiEAxVGBh9c73fHaIwvc/WRgl1CMk5JO9tQqW8PljVvzitk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":357124,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdI7R/CRA9TVsSAnZWagAAMKgQAIoq6quuD0n/AdlQPGH1\n42ueBW9vpJ+ABspKHO0vo0hr+CIpQjVb68OG+v3rO2uufHybxOZER6uciDTu\n7K0q03d+EHmqw8vBHHRmqkmWVwVaU5G/FGcrpj0zEBEZUgiJfrJQ4oTXxFjW\nL8XxalrN+zTmXzzI2lmkLr1yHaM3Le/tR9RUkazp3QH2g4G7a+XlAwdPIy9c\noDPvg2JsnDpdy/wGm5nDwHUPY6YTSse0mgpmAd2VwbR0eB5EA64OrfCa58S7\ncFZ6GJRX/gM69wR9/AYkovP9gpQe0dsaKoNHXSyJOGkd2t6uztY+TKHce3xQ\nnCyulNw90nHHWaz7gyV+Lasif+4w92k25cm+GJ6/HAWzQ29VrMh1Ty8pO53E\nLd56+PX6bW5EsXMt3V8/bmqbZ7VABvt1g6UcTL9hNNXTtDrrRlgvxNHz/FB+\ndolzAMPP9fBIAV3EBVnNpTyUruvDlloI9p3jdJ+MOirYYZmTm8b4AwGqxdNx\naecAGYwaRyibiu8YQgDo5OswLmeJIN9DPza6/mI05pXo9QPHXA/Ixd63TRS4\nMTLTtGoDw2GxQg9oBkHwqDQBEl9Xr2eCkkLWeNgNerSgB+7TRQ7kgWbwoWqa\nIG98Q2Ja6/kv2OzVVtrB3x61U3ACBuPs1y/nw6V3ObB4UTG42kQN07r+T+wd\nxZei\r\n=1hZM\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"52c2bb2cbc0272cc37d619dee6c592036b6f7234","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.15.0/node@v8.15.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"8.15.0","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^4.0.0-alpha.0","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"^4.0.0-alpha.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_4.0.0-alpha.0_1562621054920_0.05927808497637388","host":"s3://npm-registry-packages"}},"4.0.0-alpha.1":{"name":"@brandingbrand/fsengage","version":"4.0.0-alpha.1","license":"MIT","_id":"@brandingbrand/fsengage@4.0.0-alpha.1","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lcouto","email":"couto.lorenzo@gmail.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"6a32857b7a69840cc91887799c2eba7aaee526ee","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-4.0.0-alpha.1.tgz","fileCount":162,"integrity":"sha512-DyCHNQQVHSaxJ5J82e1Pv/tPafVFOE3IH3THZdmW2zdqv+MC4CFwi1YcV6/7MwI8RYgbHsFqhVGbwFGI6YeUQg==","signatures":[{"sig":"MEUCIQCpIscaKY5iq0FxwOUlxkZ5LwFbZILDIlw+Q4paL5ZWRgIgRD2mlw3WIePtlGuyDx8huOIocyPSQ1wYLMJu70LtoeA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":357308,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJOleCRA9TVsSAnZWagAA/sgP/jqJIzitMAukNdZh/Jrj\nwan7oA+ztciBGXQ4vlZ3pwiaTQQLcwnbk021iR1dGnFSyhU6ZNG2jOtUicWL\n/lMvIn+hMdLbGwMNygLMR0AOKayuz2/zPUIGU6ZjfJZyf4MWF3NSxFDweMib\nI+AkLbXbqxf6LiLutMOtvxj3wr9nSVhALme5ef6jdIY51t39MvS78XGva9Qg\n4273Uakw++TFjIhM1YVqO7KqwGpcb6Bvm7fIhXyXXqJvl3+L8cWPx9kowATr\nDLkeA5p3l6vXbnAxm4YCUQ16+IVifQm5rlB97qnSf9Bgv0RHZqwPsU5Gl+2+\nWrm+dcEOQeKYv1AZqLgST+ROVg20VKo816kPndTh55Y3JqkoJqSqtDdj8opU\nJcVv/lTYVBgPIa+LWMSCY8tA+fiis6R6a3gL0BuB8fzv93+J7sTi+KaiW6Bt\nnAwMIoi1N8N+CMJalNf8HO2oyYSoTN4j7l4200lM8jjppJei5TgNTLOf95bh\n6MV164Cq+kLNDubq7onmPGjYeY8InVS2R7AuFEMHuWBeRihXsNEfTK4g4PuG\n+PK+Fb15d0TgygDQpCYbJU0SADHLOb4AMlTOubilnLS+mYBSUJHfQjJKpQt7\nZsTeTqsS3RLAQGe2ek/k440TyTSp+KZfOaaQk/HB7hH1iklRX11aoUMQQOeV\nWqMM\r\n=m25N\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"cb22dccabd423d882ed222c6cdcc3f3fde101390","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.15.0/node@v8.15.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"8.15.0","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^4.0.0-alpha.1","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"^4.0.0-alpha.1","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_4.0.0-alpha.1_1562700125924_0.1439141795890453","host":"s3://npm-registry-packages"}},"4.0.0-alpha.2":{"name":"@brandingbrand/fsengage","version":"4.0.0-alpha.2","license":"MIT","_id":"@brandingbrand/fsengage@4.0.0-alpha.2","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lcouto","email":"couto.lorenzo@gmail.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"9a3467a31928076988a95574bad7678842380f8e","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-4.0.0-alpha.2.tgz","fileCount":162,"integrity":"sha512-nnU73t/kkBi/JsdRkGUUa1clPPkymIXTxchKNXe6ew3+KUrf9W/7lsUTFF+UJYSR01cyNkAG0XIMLseuennVdw==","signatures":[{"sig":"MEQCIFL2FX7OuMGA0fDfVhCfdhL/43Kv5haJGZ93tVoqv+75AiBh//ENGUNUKlVH6VLzSdf+G+m3fTG1FDs5wU3DDZMJwA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":357492,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJh5lCRA9TVsSAnZWagAAjv8QAJ8t9AKEwJAVaB1AKlm7\ndhpHC32KGT31ctfPzqWbBtFRJArGoKuPGJfyMqVIDf2pyfO0HTK9yl/NuGxC\n0bpINfxnAMi1D8OVit8dGTNYAP9ratxtN0RJA/CulVEnMBsDfspUWH/eso/Z\nmxYQQf21JIlOc+AcTx6nV1OFMSVKwu4J/bTd7QoshRSAqJZo+Z1Fq9mDZ4i8\nXKWmaa8oo227lEEY4H7OXw6pSHiK7vJj221uddGSCamQv+OQL9pChMZ6xZyw\nNGyGN+H8JxB67/I/s9F3Fh06du9QNNSGI3e//CmhWbua2O+mVf5yWmtY1bnE\nifYUsdWv4undEmOdvXlHnUh9X86MgOxG/u+baYfYWPZKnCuCs+BxQgelMpbT\nQdqpGrGpCHGZa1SLMC0ijQtVJZj670A4BzvCsKkwbOF4lKI64Vj0Wx9v3qDg\nn9eThJO/Hd+d4xIBYQmakrCq036YvOj2uP6SeYa/YmKyKOfvfMNOT/IQyYOo\nf3bkbMH6LGc72F6mAm4gsKarzUuTi1RsWks6hHuwBuqWoX6OumTo/SVY8rFy\nXeCAV55DTyUKILe6kpCBLux7hT/MXVGIQs8N5I8XCHIFVyUktEBf5WcaDkqm\n+J5MmpHaSqdkwkzIwyFrAE+noYiZ1V3oNBV8pAxxd4JI+nI3BHYIL3j3p6CB\nXSyQ\r\n=+qLH\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"5fa0f51cda625cca8b1fbf84aeca7ba9f9a5c3e4","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.15.0/node@v8.15.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"8.15.0","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^4.0.0-alpha.2","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"^4.0.0-alpha.2","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_4.0.0-alpha.2_1562779236494_0.6155051637736582","host":"s3://npm-registry-packages"}},"3.2.1":{"name":"@brandingbrand/fsengage","version":"3.2.1","license":"MIT","_id":"@brandingbrand/fsengage@3.2.1","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lcouto","email":"couto.lorenzo@gmail.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"95320da922735ad40b30523d2000619758dedc0d","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.2.1.tgz","fileCount":162,"integrity":"sha512-8GFbON31I42AZc+3kJQn5LvY/Tqi7A5KEe9O1Otc0X+AQva03Hh/cAQM2+phrdcdzAFp/l8IOyMe+TM7KmcCyg==","signatures":[{"sig":"MEUCIQCdf4leGxK8Ibnsjz57+zeQCffcq28CfuQiO8OnYf6ScQIgIqU+NMxxbUm8REs404p2txfmLZwJoyJqh/RPTMzPGtk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":358772,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdJ6L1CRA9TVsSAnZWagAA7VoP/3Mbo5vfeCEt6cAD3BUQ\ngJXEuMQGTzikWu/KarA0vj5fJ8sQUatVma6GY+BiQZt3Mk41ianq4glIAReN\n395E5/L7TB6h7Q9iadpVDnmYuSayCGEhP1e0KEMRPEFpUytwpBBkRHsJV4nQ\nOE+nGzLk0LI6wbFKDZOE1pQWfwjsMVZ41F2XmwJonqsec2LJUhSHWRkKIldp\n1//dSbPjb66KIa2e2rpy0nI1trEcUwbN8/4CIzsqQXs9ZHbswwlY9epAZdmG\nYnar+WFEiOzk/mGvFOo0R+jppVE9wR753fS6D4JqOUsM4GyRA6KNbHMlya8q\n2LUTcKsj9kpTMX6F8Lh3wYj9OPpawUZXb5ML4sl6AkJ1MNcy1tzsF5+GPENG\nw2C1AY/yWzdgrjRi8KeK2nYJmSVoUaFOYkU/Rii/neHFCQ4TG0rtIEBT7LAa\no8jFINIXdog1X/TVzGIb8uBl9W01E5L/zWzVBawL6bk1L5TX2j8p7IvM0fGM\nm+/EA/w5db9FUb1khfFa/Hja5k2BS1RnG4CqGhdIL531huHJLRDkJksOQC7g\nUBYGMKYu+zEVDWB3MT38yLPq4FBYxcMe+mXPuNLDxfY0ssUznB7Tj+P5tVcj\nIbSJ/R601in+M1HWB0XA7FlCXiwB7Qgtg99sISc7Q3HwQjCL48Zb5rcCiMIH\nF3XG\r\n=kp1V\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"f5c2d35af13cc52a6eefa9901761a26fdf9a3805","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.14.1/node@v8.15.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"8.15.0","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"^3.2.1","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"^3.2.1","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.2.1_1562878708783_0.09615706315210226","host":"s3://npm-registry-packages"}},"4.0.0-alpha.3":{"name":"@brandingbrand/fsengage","version":"4.0.0-alpha.3","license":"MIT","_id":"@brandingbrand/fsengage@4.0.0-alpha.3","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lcouto","email":"couto.lorenzo@gmail.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"b90fa2e1608d1dd4abdd965b4bd71f5057ef5b92","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-4.0.0-alpha.3.tgz","fileCount":162,"integrity":"sha512-kd91RZj73NlkihWch5SIKMBoVlaEIMsxI0hQyqusNJNljng5u0KVBd4NFR7MEsUQiUPJgQZPqFIwduGk84DYFQ==","signatures":[{"sig":"MEYCIQCfUrnnU9DMkZWZItcDDhq1R7yDYYmSmUgZPye7k9JFlgIhAO//abDlzFMWbn3qHw1iCCbO8a6xTU/jTa+RtUWlHqQL","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":359258,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdLhEQCRA9TVsSAnZWagAAwewQAJnEbtSqUnSRvcwPIyUc\nQkrl0iDLjHwJPojYX6F4ZvB0L+kPNFx8DElgw3umMVum2sAe0qfaBPvqneEw\ngqQ6O2a9SXiHoldbHCG4B8gDFDSQoGXXwvqdvSwli2iT/clXmtEzRjJvqdDM\nV7LAAnSWn3uivG1q7vrQ3qufpojQpAFE9suumCy7o0WJQ8vu4hdu92UyxB7P\nhGdDHYmpS47OfmU1ystV9oeGYem7pviJgKM6nvTGGT4JJDoTw1mkkhfegLlQ\nCq0FmVIDCWmQWRvcq2TilR/X3IrtZuIajyk14/IqEUHNkwrQaYLWVMIkbcVe\n8rwv4f4orHEq3btnT1nccoM3Vwyv4VQ0wzUTEl9nPNhSHQHVqaBWufPPMjP8\nTCQt8hroreXpBZS2TNa6dSaYJCJuPfoPhRQ1B4ITDu2o3Vt34j2rUocxldiW\n8tgaSW3Shj3kyOBSSkiiRpOIMWlNG/lIyGMgZ9wSrMw/z56cf/SSiN7vTRAz\nk5nziU/4/pH/l15UXS+KfiR0nZGzMiUrBfg4OZQ3nSkD66d200DRnwD+ud4Z\nb4Jxrs1XVInWeC3tcqVkVZtgjHc0sxGyCMId5WW0qxmByC+ZxQTyAOe491wp\nKoXs++dFyz6MtNqYBmLAjAkFjTGMwzUr92mVvI9dHP2D9l/+Fc4xi0vnOx4n\nXmFl\r\n=1uGF\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"3a4ce8edc7f0d9816a179ea41e834a8b2224377e","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.15.0/node@v8.15.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"8.15.0","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^4.0.0-alpha.3","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"^4.0.0-alpha.3","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_4.0.0-alpha.3_1563300111335_0.4285792115738909","host":"s3://npm-registry-packages"}},"4.0.0":{"name":"@brandingbrand/fsengage","version":"4.0.0","license":"MIT","_id":"@brandingbrand/fsengage@4.0.0","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lcouto","email":"couto.lorenzo@gmail.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"7259cb2f6a80cd41a5e3b82efbe457a52c5f4219","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-4.0.0.tgz","fileCount":162,"integrity":"sha512-1yYnZ44nKVV9jSLvrofYBjXcPTcTH14n4L75hQVZdJjAsnpxk7UAmsUmCUFbVvgzozXpY+7aeaP+UQhW/jjqnQ==","signatures":[{"sig":"MEQCIAItQ0jvH4WIvlbMzod1ZwFsNZOX9T5wHiwrXiwD5IncAiAKpFTxFxKm+aaxup5hsq16z8cN3M1/aFnBN7b87OIPpg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":359605,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdLjyJCRA9TVsSAnZWagAACvcP/jF41llKxtGH0/ZP8zeI\nNOmrFHYZARm+EUwUIVn8L+EZ355ElV33W+S5fk70opxXQyknME69k4FyMaJ3\nojHoxeLTqAlX6VtkIkEH0mB1nSqPMXfDU23TBMCDAUF03HElO7tqtR5nSV7m\nkKHObgrF7rSyYjTT/HC2Qi2GOllvWz/kDSGNBpDXzBLN5LvpvXsiZZSghyPY\ngIOHRQh3uSFP2QMtGoQbPrKfBmfS4x80EefNRjO9zb7NOL4Nd00Zml0alfWy\nU/KHOb7v5tZvz+kNDXYBV6TLa4Tsd2HFgxzKRYNUEa5suCVQd0aVsIXC8Cjk\nD75VXVd7IeGDUSZO22Na67aocCB7MKqRbxk1XtgO284ysmtQZ99OUGpBp7xX\nga5r4p3xXHn9bxva4RaL08RP3mDUf1BOJ5e1mi+J0bygV+h4nEB8MiGZiuiz\ns4tm4TA4x90WC/kk10P2oCUOum3mdaC/frIMBk9Ekc8nhvnOQMBv1lE0ouH3\nlyM4Mq8LJIpGWhSqMNagJhJbOF2AT1ab9vjsQ5zFLK9IJGy11UtYc4h52Iwy\nG6hkDVCDx0ueffqdLi8Mx6giTk5RnZkmOKX7mChinsPHu4c0xif42VbUuQ0R\n3bljlvgltcMeJMfYAsn3DN+z6DXJVGXxwgDK/By69m7tV3VlkU5zZf1cULEg\n2KNa\r\n=FMaB\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"cc2bf90cc98d4ab506de8026ae6a3405edb9bf19","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.15.0/node@v8.15.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"8.15.0","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^4.0.0","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"^4.0.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_4.0.0_1563311240884_0.0021968714543207923","host":"s3://npm-registry-packages"}},"3.2.2-alpha.10":{"name":"@brandingbrand/fsengage","version":"3.2.2-alpha.10","license":"MIT","_id":"@brandingbrand/fsengage@3.2.2-alpha.10","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lcouto","email":"couto.lorenzo@gmail.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"f097a050f70436c890cf0387194d49cc10035227","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.2.2-alpha.10.tgz","fileCount":162,"integrity":"sha512-rbYGg+CCTF/szNfrSjA2aDMbPyaXX0lyn5CMBNzBeGiyWC+Ae5gdGRM8BUXxAYxXqHkbDLEOSJ7VGgnH2TZ9JA==","signatures":[{"sig":"MEUCIQDhkOxu8nAbuFPw9LkvkiZykFlxzUCQL0msO0Qp1KysBAIgdVCRHK6p3em6fa9V6kG+eHX3EWj/N5u09uB9Pz7MstM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":359208,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdLzJ+CRA9TVsSAnZWagAAXAIP+QA/Hf+C+WquCgKtV8mG\n/74GD//SPoRwRi5z4WUsI0hTAifH20PBb57BdnGV7+HIFwckVu34jvmhoUsz\n7bz1veZ9rzXZwynBZUq1dUMJcVceeEX+PfQYoV694X0EUDLcraT6ekPdscTp\nPWPecF3M6U/QjBXMcT5xFfI4eWbrVjsyiXyNwt08qOpdGeZ8n1OuT124fnhT\n18MvFZ1Nfbmu8Ope5uwGTFxcKT0+No9y8yoz792aft9YbxndYDGNbaHiLAsb\nOwredcBzXoZ/jikvhPrywc3xD6wwzjnLnzGYN4Gm0tRC5j8MX1pMpAZi3WNk\nU5WLPYRNRDksGI/qi/5fCjGjT04zPBIRdXv2aHOBDyjN0/YvBShqOPqIgekQ\nU2/PEUQm1nZrZKv53DXMN8kmzcOGFyDJP/cj0DudA6Fb0qSsjG1/1z6OyJaX\ncSGwrykfcRiZwNhShJWkazgJpqnaNYIiuGT/wrwXV48le1gIb9C0AeabWUYg\n9cOD8ziGOBDRv7vJxumtWLrREE+aKwfkgPaeNftbno3pnLxQctjBAU86AMRV\n/aVBvTbqQqf11sev0ctjUBWXzJZn8SKetXrMpeHfXzcacpHMi+qAOY2xV79C\n+xCno7qTSKGH05AcKTXPPTpohdUOYqbmvqbxhwazckeb2D+qMcwS9zRrLYrs\nnU9l\r\n=pJG3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"09bfc6bbb41044ff8d7614231f21b59bf600e76b","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.14.1/node@v10.16.0+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.16.0","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"3.2.2-alpha.10+09bfc6b","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.2.2-alpha.10+09bfc6b","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.2.2-alpha.10_1563374205886_0.5682018298929767","host":"s3://npm-registry-packages"}},"4.1.0":{"name":"@brandingbrand/fsengage","version":"4.1.0","license":"MIT","_id":"@brandingbrand/fsengage@4.1.0","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"belzenefko","email":"belzenefko@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lcouto","email":"couto.lorenzo@gmail.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"sobrino","email":"work@sobrino.com.ua"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"0462f35e78df794ee12350adc6f11c778e010d15","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-4.1.0.tgz","fileCount":162,"integrity":"sha512-HUZDZtUxSqP5mBPMcdqRgSnvIAa30asg/vwWdDosTIDcHEiFA76F8730kRP2M/t/uOF1qwQ1wEcDeJc4VavVCA==","signatures":[{"sig":"MEQCIH2cB/MleZ0giJYd19VCysdZnmp7uWeQ0mO3cmMNjxraAiAa8idbN2I5kO2C3srKE0t7wh2PeBoYazKyIW0I1NmySg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":359901,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdOJxJCRA9TVsSAnZWagAA198QAJf3G1uqC7XshBaAcOox\n8tAg3bHAPfllpQp5KsqMyFQbxyB2FZag8ev/DXORoYZaCxibUrW5d5qCkrS2\nCvd7uEMqjZJcUdg9dK/vc4VuZls//imOYP3uIK+8VWRteaKrn5Yem0YgfP8Z\nqS5xDT+e5vZUk0C8pgDbT1jhb38EuDhZSQWDuwdWcLG0G5a87h/ozPQrBcud\nCBFRg5VIbmugA8l+YXM4kTshmo44HfYW7DWy3Tt3JtwnOMrpn72nuj3E5yEF\nQWY806FavFIFh+xQwjTckBjNAN03tUX/YuMKq85VqjO/smQraMZdKSYdkoj9\n9R+jwritvLQOj65mwc6toPNSEaFgV0IdsCRcCZa1bvg23QOLLcOaS2tSEiWX\nhvkVacF1G2027UZ67BofURlnbQpTkJSynWzqTyXfrOyhCA7lBoHzx/woNeC6\njw4RH32M+bicWu3YKkxXaAgQ7Atu2zyHMTtmcdpTF/OvxnTN1Na2H1XFQtO2\n2IpTBDdeXQ0W844iiVMZmhvZulGeCvLdcZOzccmNgT192vl1MlvUEmvpLSGs\nnxRes5L8ERIV1L1MDJLsmjEypkUq/E6T7L/eNe+PrOCnsAR/k/BdndfSSNcw\nl3nwQqaCJBsXUy/lgizygAbRv0lYgC//KhUjgOK8yuAoQXqshJdmVfgO6GCV\nBlWp\r\n=vPu7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"37d7e9a219b0207297ae38f22972e9d2e551703a","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.15.0/node@v8.15.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"8.15.0","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^4.1.0","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"^4.1.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_4.1.0_1563991112207_0.7766977911423527","host":"s3://npm-registry-packages"}},"3.2.2-alpha.15":{"name":"@brandingbrand/fsengage","version":"3.2.2-alpha.15","license":"MIT","_id":"@brandingbrand/fsengage@3.2.2-alpha.15","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"belzenefko","email":"belzenefko@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lcouto","email":"couto.lorenzo@gmail.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"sobrino","email":"work@sobrino.com.ua"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"12b4d315f0e6afd4bcea3d9a00735956230f6ab6","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.2.2-alpha.15.tgz","fileCount":162,"integrity":"sha512-W2gXSooGEzmnYe3GMJQMWG5cE0rUjbL9472LXAwfM9nXe6XsDSGueBTwAwoUA1K9tE++DHd0YI98JHJMQX2Wiw==","signatures":[{"sig":"MEYCIQD9dTn90rP0UptOQHMS6mpIRA9twDI0wDgYHqy//3Nn0gIhAOoz8b8Kn8fcjORjEaov/MK9mEd0HbUBkeaaK1T3dQ9N","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":359208,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdOKG4CRA9TVsSAnZWagAAWKQP/2OVg0foGaSQCcVBQ/hw\n4tA9SvIsZqoLp13k+uae0X8qCw94eNc9CYQNyk0/XOuWRXsQLYtRGk3vSb2b\nUC4IiSfO+5f28gIbhes9CCwKvvRLG8lPSk5iAGhCKjTjDMC/k9cGo86sp7bW\nBeQ6oS5slXU6Tm2vEnMSclumIUf9/Ri8qg6Q8u6eQlpm1lgqrBzj9VHnMM8y\nvXRmIl2UBZ1g1LvSF1N13i8ZBo4czHqmfMYYnuGyQQl1lr56n9TKr0GAaOOs\nBTefMCORdgKr0S32GQSA7nmFXHUaN1iLrdchRoHVoVOnSot2t/NwEQxSpuaO\nc4Lr6zhhAVR1ytDwMGX/5933c0T3FWg/w54ehBW1YL1hIBEkRpLzSP+pafd9\nALEd3BI8sqaLLnfLRDgSULksWd1Lelr3zG1AM/RBERpF4UGrqMcS1sIatdLS\n/jhLWVXXRQyz/Pvv8qQLqFk9OGsDgEvLcTyumxAJTSZPMV+PnjEINqq1ZHqB\nMw9YVum8x+zdRTVr6TalChFXbtVwzEKS1rjZgfvu9EZWKRPNk9VOcpHS/Hbn\n2B/CdjkF1UsfETm7q92TdADrzitKzDMwzeXpD9NzYHIeLU6u9SLkZjKr2kio\nbWIaag6AYbdTGEABUjgx5tKhPuJG4uolhoFDS5lDuolF7PxVXHPK2DBcGQmG\nMEDe\r\n=O8Vl\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"c732aa82b253b2ac9a08e2dcd2b98b7567ede4a9","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.14.1/node@v10.16.0+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.16.0","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"3.2.2-alpha.15+c732aa8","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.2.2-alpha.15+c732aa8","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.2.2-alpha.15_1563992503650_0.3102766079135879","host":"s3://npm-registry-packages"}},"3.2.2-alpha.18":{"name":"@brandingbrand/fsengage","version":"3.2.2-alpha.18","license":"MIT","_id":"@brandingbrand/fsengage@3.2.2-alpha.18","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"belzenefko","email":"belzenefko@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lcouto","email":"couto.lorenzo@gmail.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"sobrino","email":"work@sobrino.com.ua"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"b4462d0e511cb0e8328584ae32c34e8a7c452e0c","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.2.2-alpha.18.tgz","fileCount":162,"integrity":"sha512-CqBZXGld8goAYE9ju1f6CZS0QfDnrHHG2dXnpEToDgeAKVy2eVnGSsc/O9LDFzuhNOZU1EY2RK2vh0pFS6i5PA==","signatures":[{"sig":"MEUCIQCZh9yCIkSxhusruV1G8BqwuLdOK139xcnOOtYk5jQ8JgIgL1RnvtOLoMo2uN7xidDB3DSunNHkclS0+045a8au5+s=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":359950,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdOfqtCRA9TVsSAnZWagAAIfIP/0KDKnrHno9oAJgeNVwB\nTxf4806DxX9ijVTL24iMuApjbMnihc/Pg/8zJ/Lw+8tbWfCC9hyFsjhWKpU1\n13oUJWWnjZryeyOW1B7sM28I54zBJoRoANv7mCGa3iKno7hPou3gJA5PI/tW\nVfdu3n+ZH3ix2PT8chfNCNhcUFyfZ0uNpIVph8G84MGi2Bl3eQbl0JSPFJG/\nLkMVoKTxL5s+H1WQGS3STKNPLLIm1NwdDne97mwtFoBJJoPwVAXNM3uKkAU7\n0K8LAqEcjLxEuJJfs7G5U4hp2yM5mgZdsTJgeWlmSn+ilPFq0EqZWSpHZIbY\nG6zzfFKTDHr59thywJN/G1lquberIPn0IQGBPfS9w+NS+CllvLdsmeEDFZi0\nk9arC2M25VHFMnTVANiY8R3KcZ8x3xOSEjZxWvGDf90KZQlIIhwa3Vq8smU2\ni8fpinmmeQu3uZpPq+t/XDBM3eXF61B09vRih/UrxYxEYJeOZV/YfIAv1XW3\ntvcHpguJHJeJoRkX3qH+5deZBHBl1WvOupwQIDAi116gS2kVm8AZcpHq2MC3\nyO0YstL5PObDPjmxotirFTVK90a9ErcTg8blAe7kpZ06yDoVAFVA63tWDsxy\ngfa3yDwUJod8QZY2ptxTFw/fda+XzPOnQ6bOo9XJbvbKfdjy+pR8jdTJ5JUu\nW2F6\r\n=vUGV\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"6e9c857f5039364728b2fd01a92fb72ccbdfea27","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.16.4/node@v10.16.0+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.16.0","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"3.2.2-alpha.18+6e9c857","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"3.2.2-alpha.18+6e9c857","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.2.2-alpha.18_1564080812577_0.4135752145626175","host":"s3://npm-registry-packages"}},"3.3.0":{"name":"@brandingbrand/fsengage","version":"3.3.0","license":"MIT","_id":"@brandingbrand/fsengage@3.3.0","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lcouto","email":"couto.lorenzo@gmail.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"michaelabelebb","email":"michael.abele@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"sobrino","email":"work@sobrino.com.ua"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"b81d860c3895d72808ebab075bcf27a5fa6e5e5f","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.3.0.tgz","fileCount":162,"integrity":"sha512-vBo8c0sYKSgd44sExRw+Wep8WL0Fupm7v6nOGcL4SZ7F0KdS8O8lbmni7S9ro0KIb3PWQ0NvU2dYorenA8SnUA==","signatures":[{"sig":"MEUCIQDgwTKy8quHyTBnfeSxws3br4mrlScN2i5fBj3BVFkrRwIgC6FwmZ6AeOe+OLxoFq2V/sOQyLKkccgowCRKmFazE9s=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":358932,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQLecCRA9TVsSAnZWagAAackP/jJvGi0LjpmrFpFSXZWX\nyAxIbuIzlnnHxl37lOrIIJYytnh9W8zUpcoW5ZCi861BIqrGoBQGpTSRz7bN\nBO3s9TfQRA0XSQiRnfHIviAQoaM6DEE2O8vjZsx8IZ0LD+HboxEfYOm5XeOL\nugfGm8xMl99PhSbNCfUb9AaWUXBO1wB0SK65Jh7V+Z1Yew+LC2iAa/qM1+3g\nQ9hSDOyT2N4H04BE8XrWv5ijtdyQHy8DNtq8D3IYOwSJSDcyoN1l/CL0Jcwk\ngCh1drZgm8lCP/zCxfU07j80LnYZ+f19NxkBANHbrLbuBCjHN8JViqB+26Bd\nYA0a5mKVtFh6m/e3HlClWDH9yfNkVzGxWYNh5SBfKvD7LUrqJzXvRF9xLX2u\nQBUvQcZFwjWG6gcTQCwK8I5JpIF1wPqu525vV0heqkHdub4vENyadEtO+hHU\nk6OHVBUm57oHfr25RgybBjMZOR5rWIMCUGPtKMc8b7mDenhkl9IzHRvNg/MT\nimne2ivsujFk/M9yQvCIpo8vsq1EDP0IQN9sPEGvzSREtndCzLh9+qJa6sCc\nLmu5IvuCKhqyGiLHQaMtP5DPY9aLfNtPNGZCtWEl0EBe5v4yZHRM1vHmwcW6\n0e6I/oLnhyDH2DjxqH0pir8VEKcsxPXhIslBGNZ94PYcScxQfgqVxuvCjRMa\nL13D\r\n=Egag\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"6bd9593d25a313f949d8704d9e9e7eb5646196fd","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.14.1/node@v8.15.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"8.15.0","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"^3.3.0","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"^3.3.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.3.0_1564522395452_0.12892519435624927","host":"s3://npm-registry-packages"}},"3.2.2-alpha.30":{"name":"@brandingbrand/fsengage","version":"3.2.2-alpha.30","license":"MIT","_id":"@brandingbrand/fsengage@3.2.2-alpha.30","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lcouto","email":"couto.lorenzo@gmail.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"sobrino","email":"work@sobrino.com.ua"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"f434a335f19e8d4121c422959dcb9e08401f6276","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.2.2-alpha.30.tgz","fileCount":162,"integrity":"sha512-TJzojzuvz22A0bawgRNd1RHfg2DNiu+2p+8B3yfOb9P9XdiLpRNOTP2+8UA2PFmBZTA1KYOvfEFUL366g2TNhQ==","signatures":[{"sig":"MEQCIBksdxCrryI2SPKpC4ONTH97XZJiE6IYioZ9CA+Q7AP1AiAUKHbJ9PzUdRKyfcgOS+nsBampf4bDCaAAcl6XLTQuqg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":359950,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdSHhOCRA9TVsSAnZWagAA8LYP/1C2TbHrLE7OoR72MNEI\na/Ghnm0jnKSYbUZTAqJ1guJKSxcHbLc0VZvUhSpuafOGQn9/2zlctNx8OjRU\n7WnhiQxp9KIEgv3+ENE+7cEZzJeqkVY56zjZ9A5EqhHaxkqXZtYyyepEdMF+\nl0HUMFNPfcBv7vZoZnSRhWWrHFieqSm8uzT4wfT+rgafe2UzLQVZY3j8Fv1J\nGpy/Wu3/KdCpUQTwr8L6sXTDYR3fc2wpoJCYrTeEX87qnI8T+3mUtBl0yq3Z\nGGCvGXORQGSV7uFeTt5fjPuZ294NcRxgW1O6o8kDKq8GeoipoVqNkOWVuK46\nhnwzR2Bp4KD6rY9bMFhu/bxfA/X7BHYR7KVGC/xadCNtDpxbDJsUP8qXjFU/\n5UHlu/x1D3imgbOm9Svt8PqNYsY2Qa/5xAJtC/5IM4OuC8Pi90gN8y4Iif4p\nGu8MdV77Z2YtYxgfir2rlqY+rMOqkN0rgu/06Se/fVbwn7Kgg1KEIGnb0/VT\nGGth870hKb/aglOwN3rO76M+UV+KUQVqN9ufM/sPK7JLj1t9x0gt+q3CWiVJ\nMHfLXXKxlvGSgwgCAAmgftbLMMOX1GRMN7zAUZ9wTgk3tIMabmDCNZtaMsBF\ni/cRNuF7mCvEVyUTPCmiWt1zWH75y1LGYKULqVbWXIcGkFoRcviCBuMJCsIc\nx35p\r\n=7bb2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"e2023c6006c7d935266c14cfa7ed43b3e1b7fc55","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.16.4/node@v10.16.1+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.16.1","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"3.2.2-alpha.30+e2023c6","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"3.2.2-alpha.30+e2023c6","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.2.2-alpha.30_1565030475578_0.9488253999705731","host":"s3://npm-registry-packages"}},"5.0.0":{"name":"@brandingbrand/fsengage","version":"5.0.0","license":"MIT","_id":"@brandingbrand/fsengage@5.0.0","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"sobrino","email":"work@sobrino.com.ua"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"0587d757be3e2c920294c6315a85ea50c2251fff","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-5.0.0.tgz","fileCount":162,"integrity":"sha512-HzTGrGV5yX3HdC1RJC0EHTxfoLDEShWADxEwbSz6jQZF3NiRu+UPXVPUi+LQdetRH69aV1A9TseYx4kB+fyTMA==","signatures":[{"sig":"MEUCIQDQHvhnwul0c7ZgWzhkIIR4OdNgA5TtIWHykU0Dm2Y6fwIgeXJqytqHFP8KXVdHwL5h7CDMwaoKd3+kX01eK4oqPrE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":360272,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdSbVZCRA9TVsSAnZWagAAGx0QAJqD4CxF3usZ8muRuXQm\nymrfBAudVxw/hbTzPtpyJcHd0cBgA2Weq8rKig7ThRZBm8pX89Hn9R02mBFL\nrbcWcyvtntBpKtIVdD9bXGpZKrS+rZA64SywE5a4RKMY51XnaT5dVpUIKtca\nvj7F/ed5szyvOsezG+ZwBLpVwPbT16D5pckK7WHMOEI46Lit7nsjmOjKXkPi\nDJLcWaNFNXKXF5athDfvJXhcd88QOtPUnBXr/qSTOpvV6W1gnLFIyO7dq4Ca\nGUKBbPvJokD0L+Jth9Xl9QtETloQcEFWtGDDfXN+KLvvMoE8bP5kkaoEy7He\nCFI4d0j3bkSts86Vq7yWbUQJ5pXf3P9h/l1cnLc7yp1ZyI2G/2Fl5SrUraWT\nrYQCjcwMoItxqSuNkdC0ptanplC1+JnedqaeehfV+RWnXgxjDMfKhWTAhmzD\n1KXomC3dTqqEjqrz7b3nMwiizK+2b9gu3aWhlYbOfvcZdZ28rTBTb8voHx+g\nVAH/4RHlGv5Q9BKAi++HEu00yNGsTVOTqT1RtLVKAvC92TwgppD12F5OlLIU\nTVakGJUQO3VwT1OtE6TNNJOXFjTzFz3RCu/0doHkXZaKAXY2EW4t8VwQUcbq\n/01CkNVzo5ETYDPyZSKsHtUA1KbsedeV7/YFb37eiQcj62bk9QOJnTpNGVFT\nS0zy\r\n=R34Q\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"df9654648922c9534b02adc78ae9fd1bfcb7f668","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.16.4/node@v8.15.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"8.15.0","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^5.0.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^5.0.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_5.0.0_1565111639874_0.9264056282888853","host":"s3://npm-registry-packages"}},"5.0.1-alpha.0":{"name":"@brandingbrand/fsengage","version":"5.0.1-alpha.0","license":"MIT","_id":"@brandingbrand/fsengage@5.0.1-alpha.0","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"sobrino","email":"work@sobrino.com.ua"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"2371f0fb11bb9bbbd41729c0fd8d46092f78b52f","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-5.0.1-alpha.0.tgz","fileCount":162,"integrity":"sha512-BGGnGMpltHqkoy6VOxKQzZPmmZlsxIUlqbjXa59H6t9jfIKszH+ZellEnYx6aTgRg9vHSv6JOpb+H55LSPIPfw==","signatures":[{"sig":"MEQCIBZ2S2jiq+DAGZtHXt2LOszXR7BUiVKys1b6Vi5GEwvZAiAFZEXf2LPiZ/i0luSpJAb7k3GAl83eANdiibvD2YTARQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":360318,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdSbwvCRA9TVsSAnZWagAAzlYQAJBHkL0iWyLD/Cr6EnSC\nPcGplw0x5VhCgyq3fDLtTC5OYk9fORfTbxAbXWu9SQirz4h7iwdNgAg0u8qT\ngYW9wSuJX7P0luAPJ2ejasha44MZiVdpXVRTN8nMqTD9Hot+H9ZUFLJ7sGx/\nYgxcIjY6BobT4Ly+GcbU2zQolvYXdq271Urt+80epWCsUK1Xei5BUeQzuJF3\ntfB/WbqDRbeWssmJub5+eU6iiZeHkkMK05OOOvVzb8Av/ftJ5YciM1M/Zf4g\n4UA4VwOvuaU6JptKd1uazHihyBwgauQKI7C3vEHJWTsJlp4TJ9hO23LqdoRc\ndhRLi0FhpJPV3ErDzdg2YiLlzi1up2EOXmZm+wEtwadWgIelOgvMQ0Rkzzd1\n3nWXofsMOYmnEn68qDJzhvX4GGZRBqDCko60aG5GPQE3lZ/e/ky3bmqzL8Fk\no7YSodxgIYBRoyvXqFDx05qowkuKx7wwvHHdVB8OHpWwyyv48dKGtJwqO8vk\n69QLu0nDDKxomeaO8bjrbyHdPGB8Gly/dNMJWwK/nUUiF08datynoH6vvI+d\nDO51GgAAwlzygWCGhcikbYDXD/uaqVrXq7FTXsspQQ2NOvbFr6iwwP6eCV5I\nE6F+JvWpSJb+QSxTNH09qoVpEYJYOxjhDnQ+XRx/ln0+wgA5SXl6FliASypG\njZ+A\r\n=pOTh\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"df9654648922c9534b02adc78ae9fd1bfcb7f668","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.16.4/node@v10.16.1+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.16.1","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"5.0.1-alpha.0+df96546","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"5.0.1-alpha.0+df96546","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_5.0.1-alpha.0_1565113390681_0.28070944760832295","host":"s3://npm-registry-packages"}},"3.4.0":{"name":"@brandingbrand/fsengage","version":"3.4.0","license":"MIT","_id":"@brandingbrand/fsengage@3.4.0","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"sobrino","email":"work@sobrino.com.ua"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"82a558ab5c186537c4f13fe5756a6b4009a3b822","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.4.0.tgz","fileCount":162,"integrity":"sha512-ny6qkpFX9a9UtKpx5qofp0jJioeVj/Os55mjscGC/HolbAXDmhfkMh29RseJYQVrZ7Ixu59FNqwCeIL/cFnsoQ==","signatures":[{"sig":"MEUCIQDNnDqHA0ikFWAP6vug9D8MmtWRC3SsY6JqXCw0xODLxAIgSWUjiBE0vuWrlsZ36N+t0K/HAvubBixM2++YKje/9ZE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":359092,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdSubvCRA9TVsSAnZWagAA++UQAJ3w8IYIpY43jjyR8ifa\nB6K25uZgUqx65rJ0n0zK5yBbhKb60LPLgwdUDFtQb6IUr5s24LJG2mxKSCjd\nGEnJ8V8omEdoeF4Sb2O7pB+iPeX5DmJMSAm+R3311KMPQ1YbbXwJzUIma23s\nECDZ8dLKdvkDp/ZOU1HV2aZ95qwfdmnRhZ2UUfSq+6AU41bWaq1JwuScAFTn\nlHNnPjY4HbcTmlSu1IJFnFbF5idaRBaq5dHsm4LWpXz+iUJbfKmMMTpFv7tQ\np6N1YOvb0DcFXRcwuaT/F8ys5i9FtDFIrEpr824IQBjOJF3FfsfgmIUXspji\n0+Jdkwv0TFBHwDMJMaOpx6MoDkOqYNa/Rwhi7OLcfYyl0deQZ6v22uuQo6+u\nVEwyK+hqpLLAUYh5P/xKWryRsgdT4vTGeCCaFyokLZgXiG9RyvsLcIAOEnG4\ndd4NKcnq4JytjLGzDcF3HbssCHgVtzkLSQ+1DaMST6/CpOfW95/tToeVIp+o\ne3UnXVTpGdmP8BzDHR9pJRgI+9Nz/CNuIpQMivZuTGS1BYPk38uR63W6GIML\nkmHNzHRaIyF90Tc136obj6mZ0P4Ih4cuWKTGoobQ42Hx37KjBH0pFjnC88nT\nIGxRklzRYC9kkota79zrgtBjtQ6ywYviUt1P1L/gwZWJuTH8dc976xvnPjkk\njNmu\r\n=iqWT\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"eae6b91f09de12cbea8f7c24fd97a5b841594778","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.14.1/node@v8.15.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"8.15.0","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"^3.4.0","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"^3.4.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.4.0_1565189870725_0.020614734319259087","host":"s3://npm-registry-packages"}},"3.5.0":{"name":"@brandingbrand/fsengage","version":"3.5.0","license":"MIT","_id":"@brandingbrand/fsengage@3.5.0","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"sobrino","email":"work@sobrino.com.ua"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"c47ab38a9374040ef2bb83587fcef5bc1309b137","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.5.0.tgz","fileCount":162,"integrity":"sha512-tn6K9Rang9dNFn7IAZ/x4ySV1kGnmX6+8wwQDZMCfs8jCCp/sQIhhLkvmNwXKmVl6t1ElMeG/vnlIiLnLn9yBA==","signatures":[{"sig":"MEUCIHWv/V4QvG/2f6kVBXhORSwz6BmF910IiTzp7myUTN1rAiEA0W1ZTltR/9X+jhbgRTBL++Uc+/5m9ZU41cgduokXuAM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":359252,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdSyiqCRA9TVsSAnZWagAAKqQP/2sW/ty0ucKZfiVLk7uI\nwvJUkWl0+E/4MNX1qgHt+Yiq4nTenLkIgFj+quOE8P+/E3ajzVPw2BJSSgtY\nYw5iRk8IWDoR/ap7IJ4RfZ4LAcpN2KhiIW3yQtBEB2ap5tICR7pBMIwNYMq2\nMLRVsTQdUpkfNKIYdct1FGOvPBStqIGoFRg+bxWAZb1/i3/Uf6aFNEo60oQ9\ndIfMA3GO5GElJsdVsThRunGTrzS6/2urh5G9hhHH3LmHVDU5B22SpBmuX39u\nJD58kDrWJ0RREVLm7wFKkV1DlEWgPrUWozbZDSVXwdQCExeVNZjcZ9GvCIsK\nessu/JLRf3gDSFMxVzCO7KjrcPHpa5jz+UmklhKT6UZ5F1f0oqiNeOLOIn0/\n6zPGFxkeB+GE4F3JcF+MVq2AQp0rWLoYhvrClAc9Ob8St++z2RG3kxlO+lcL\nAY7xHUb/OiT0jE++6sCSxWFPIs5M702lyyTnB+SSua03tjxsWQu8cPqss4VR\n3kI3BdUPm/HynE6a5FDUQZohpKDWXWNi8/vIqEldDmmM9tr08uOnM0VxBz4N\n1vbbo4RnVdDITqeHKbxNwPa/EssBMQ1RawuIM3HkmU1HBu0g8WMIUzpYMbs7\n/pXNWrid04wuGRPJo0iUHrg4hNEv/yGpx8Zq3NtRh0eR1dfwZjp+pfDu9Sjl\nGxy+\r\n=PyLP\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"19ca89eabc8c53ef10faed98391e408790fa0ac0","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.14.1/node@v8.15.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"8.15.0","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"^3.5.0","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"^3.5.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.5.0_1565206697566_0.5733869462462535","host":"s3://npm-registry-packages"}},"5.1.0":{"name":"@brandingbrand/fsengage","version":"5.1.0","license":"MIT","_id":"@brandingbrand/fsengage@5.1.0","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"sobrino","email":"work@sobrino.com.ua"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"db9065f4fdfaa415bd427dad38f8c0f0f2f6e5e9","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-5.1.0.tgz","fileCount":162,"integrity":"sha512-/G4gstGJMNcIMfLGfzp5i3riTdGG7z0ERS91hWQMbaSLnVGEn6L8hgvG2Fq4Acirxx+cLDplyugFJLVTW5XDew==","signatures":[{"sig":"MEUCIQCEPWryVXGspoFOt2M74yU0wOvxlq+mOuAkizdEUXPrqwIgKY5YiUkZ2NymyS/24TL/6jcGHpFIN7BtW/ic6HIAUFo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":360432,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdVCwWCRA9TVsSAnZWagAAPH0P/j83714ahjDW5smGHPGi\nDIti7wo+mzZXEvq/zKtBGKrT8fcC1F72eUhturr3Fm+ppGfb+sJuxD9wMMsh\nwwtcTgUECBh7ZofCn3quw/xzjF9oYA+K5DLrXVwmGcji0W6DT4ZRMMISi5e8\nmpDkaTg92NGxYtciWNYIUWGBC8uH+PA3AQqAQKgBBuAwFvE2OG568UvS9aKe\n4FE6j88bsU3HET1BULnLyu9kpbHP2v+PLuhoFPQ+1d6XStdNWmc+qpDuSdow\nFTJOvugfr1TlaXY6s/RKl4N0/C/a7JMPuowsx5vv9/5iYQL++J+6E+tW9gyO\nu0uJvofNkVHu44WOqQvloFOQEs5BH4a8RZkHP1TT1PzloK0BvAGnwnE4MEuS\nvH4ABGPaz1nKl+SxHcyXrVkgxCcCCtxZDItDzMHd9lEAERlUmX7qcJYLacjJ\nUI4Z+J+a9jFreiSqvh5XN6AuSu6ptOTZ73bmuIrFOgI3h9PtZEvlvGQIhb9F\n2FV0aPJ3wyFeuEpvrcQ1Kodv3G5D3O0Jd55q1Sc1z1T6eR0JljbYnHErAOlb\nA/jogs5mYTx7XfQGlQdNKicF48ru0vYwTdh8g6cZigaMXeoYQUursWnN5e/k\naXY/XG5XeqXZ8bYRpKezDFdBsb+WoxeUU/F1L/SJTVWb3F7ij8AZiWt6PlXr\nNWuq\r\n=gJEK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"591ca8a7bf8ede63c8c3c7f2b43f9de7e64525dd","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.16.4/node@v8.15.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"8.15.0","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^5.1.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^5.1.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_5.1.0_1565797397153_0.6358141135293818","host":"s3://npm-registry-packages"}},"5.0.1-alpha.9":{"name":"@brandingbrand/fsengage","version":"5.0.1-alpha.9","license":"MIT","_id":"@brandingbrand/fsengage@5.0.1-alpha.9","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"sobrino","email":"work@sobrino.com.ua"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"75d85368272472c05d1f2f19467b59de39f3c717","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-5.0.1-alpha.9.tgz","fileCount":162,"integrity":"sha512-qsAX1LXWA93pMLNQ/BbrlCHj1cMmmuk/2MFNRkDLuNLhTfQ7AATR5RTnFmYpwn/3E4wdh+FlglDe5ducqlMSfw==","signatures":[{"sig":"MEUCIQCm7sj4WzfU62qWtR7s7iSkCyLDt15k+m7qC4QffMMmggIgV96oHtiTNZxukkLO9BobGP2NOizW95r65zS34+hLLx8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":360478,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdVENFCRA9TVsSAnZWagAAVNoP/AktV6kzRebDTpLX9KbL\nTVU8Nh9ohTSiPzEWJobvZZ+ad+TMTcJCFIyPMrvDAzxJJnRa/fV8myd4nNog\nwafELkG1gANLplt/myn0Cbx25dIFcpYOREX5bG4xqpewoIoP241BfUy+Igff\nFzkEPeTGP5W/DPOon8zTpLTPguAoyHYMHI2rWC0F/eUrQKkThU5i7t+14ih3\nXyAw/Uj7xFfaA59wRrFCbYa1kA80HFR2aKSD+Es7Fgar0R6+H3nIiHLr3lqy\nGz2QjioVhx+kr4ggpT9yfPmxEt4JzVK8ZOFBhB6Jvvoz47pz6t7CLDksuNLt\nPOu8kKRWYwIGNACON4/iASlXlBMyO0uxtkqyAg1Is4UnBPDRthrrDapf1ms1\nL/Xj1x5q9OtipI3DCeWBs76qHgawWasfcd9D/Gkd4povglTenefd7WWPYgq8\nfmQ2lXBE79XJzis9enj5Ymm4sRt4bn/WknrO8Gxcy/xeTMBD2UUjUWtbNdzW\nA17px/PNKEo5k5t6CEGmL1EwtfJhaFDKabaa/0SUfCJE6DYlTBfA19DBlFh2\nqyG61c1J9+IEXBWIC5PnAWFRS9brOb3A1mjlVQWd0o4e7nfMu+tNz6d3erTX\n9dQXgWcPLG3u09rv0MS2numOkXMeqVaIgUqLoLMEOw/gmipdVO9Bs9L3Hs75\nl66G\r\n=Sk23\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"75c159b29844b332ba08e600ea9e54df09e4f488","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.16.4/node@v10.16.2+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.16.2","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"5.0.1-alpha.9+75c159b","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"5.0.1-alpha.9+75c159b","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_5.0.1-alpha.9_1565803332508_0.6367321432456807","host":"s3://npm-registry-packages"}},"5.1.1":{"name":"@brandingbrand/fsengage","version":"5.1.1","license":"MIT","_id":"@brandingbrand/fsengage@5.1.1","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"sobrino","email":"work@sobrino.com.ua"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"1484803b76bc35dfdece8bb6de0bdc69a2d9a161","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-5.1.1.tgz","fileCount":162,"integrity":"sha512-HnCZGMrkj+YURFsXZIvR1jP4wNhI/2uG1lUch/fPZCkezbEbac8hwFpAuI7Z/LRv0BNJV2uKzkfne0iqUasoEw==","signatures":[{"sig":"MEUCIQDMDExcUr/UhFV5dvIY13/HQ2CzyDBQLG0z7lEwCqTeJgIgJy5gIApzMdE49SP1rq+UySExLmQEmq2xtwoH9JwjD9c=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":360593,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdWvi3CRA9TVsSAnZWagAAZJsP/0n8Lshn/6Cc1cROC1hH\n/Ft4dNR7floetuhC0gs78VzsztYchNYmDgABD7oJcfk01ZksjwEFE93byD2m\ndOsLKyZIAdSslKQuKmXmfeKBjg6J2BtgEyt+xNV8gik298UYqXYZXrTL1cPj\n4v1yvzFj1Rkbw9FrLXhb6Gt+4Mrvtip6URcyvMHbKb1HXIdKa5Hbny2r9aCF\n46yXtsG+o9Nv1nFkyboHbPVUXKbaOyVYywWunG8GPh+1viamo3gpDT/UofD2\nGqM579mhneKhv4+7WlXaQgyn1OEhtMw6CU9VPFzJU9kokQKg+tKPHbyxRWBH\ni7I0F0nsKoEzqfJsJFVQrq2VPMA74Pg9ebUM4XizlkFmDJvduytFRtbcj9ZI\nZdBNg4WNaj15vbAKogzSoKP4JcaOXVzGqFqZjAKIq2IoP4jmL8BqQP3H/mKA\nFv9hQcTr58Ru+qGw99v7HhZe9NeqfkFlO1iCq/TYF/m6PtCF86ZmQVJQT1uA\nWjWYW0myLXXBYB/Cg/ZG10G2bT7Ord9JrjZol99AehBaHHEJOAX0P1YFg5aB\nI8H4FYgu47rexUzlmstSR+9P1s4VCK4IUhddP0++VMjinOQfIfioK+epOcmi\nVSKtGJ82lvUv4H4imTbhz7HKXp2hYMYJRLJHkmqpR52lMeMhccP30wA7T4Fn\nkFSw\r\n=yCsk\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"77971add18a340df1a8c3d078a50061a53a3017e","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.16.4/node@v8.15.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"8.15.0","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^5.1.1","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^5.1.1","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_5.1.1_1566242998459_0.6984142814568117","host":"s3://npm-registry-packages"}},"5.0.1-alpha.12":{"name":"@brandingbrand/fsengage","version":"5.0.1-alpha.12","license":"MIT","_id":"@brandingbrand/fsengage@5.0.1-alpha.12","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"sobrino","email":"work@sobrino.com.ua"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"c180822ada6e36fad0ee70910d128618a8503bc7","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-5.0.1-alpha.12.tgz","fileCount":162,"integrity":"sha512-bAOi2/v2HY2ONXtg+HKAD6q9hLtsHjWY3La47ldPyav+dywEy+WIv/1G3Bp5HQaeJqAfrZB3o0OFJnBAqcjhZA==","signatures":[{"sig":"MEUCIQCxLn+9K6jlsziUXvRK5kUb+zTpaf6V+a6WGXIWi6l1QgIgGMVdEoege/ebQPUu4c7dM55VF22a4+3/Jbzh3jiBjH8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":360642,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdWwdzCRA9TVsSAnZWagAAyAUQAIXN45DznqtO7eCslXiY\ngmD1W8ARB7ShSYBY9XNJbN5c5wzMazH8P8aBkLhUozv9Eba+yLWNmHR5xWnb\nHKzN1Eeo0bMe+jVkto4tJni80Cecp/5GaVDxiG33XHTXRYJbdAGmh124DySl\nvhPJ+u2ToZYUuQ1XswCq5RZY623+ankbJbkc8AbAsRReio0losQRohz4pQqG\ntx0uDn+aGHQiruGMoi7n0BwDY6ToHsr0X3KDvFwf95baRV31yJmFbizmOr6K\nGM6EaLkOFEBsAShgPoJwZUZswakoEaUhtrSYWECUYZZOZea/i1sY1WVrG71S\nbwhTgVvRZ851OF0evIsqRxl3b+avzN8Tn1FFA5VqkNEaA9E8bevUCUogNDmc\nTiZ0EdmtTH2e+Oy/oaWe/MfIICMqw+j7wksbIjYFRO5Yp0ArPPuILF3cjHeW\n3LEsXMFYcP+XwVA0Og2/fLvDMaeLcF4RQgUo4AZZhoDzAyccY5S07dk6n3d0\nqY9du7wejn1+rqM/JmYtsDKROs72CdjBwTSc3VaVAU70p5lRcQu8xvA00lkF\nda7Qh53RCEsgSPtHeg7uVG5y7fz/niloOQbvZP+ijEU0/5FLjLViWJHkuQhX\nLrGSF8S92xsKBmjJR4WgyEPtDxeWifl7i3yqf/kyI1dIesCmLgZWpyiwBIYn\nEFb3\r\n=wmXZ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"55b9f45df7b5dcfb7760edf2c2be1de55b3817f5","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.16.3","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"5.0.1-alpha.12+55b9f45","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"5.0.1-alpha.12+55b9f45","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_5.0.1-alpha.12_1566246770766_0.045561362192392485","host":"s3://npm-registry-packages"}},"5.2.0":{"name":"@brandingbrand/fsengage","version":"5.2.0","license":"MIT","_id":"@brandingbrand/fsengage@5.2.0","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"sobrino","email":"work@sobrino.com.ua"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"15c2769d5d79b7cd063383264e5aecff754fbea9","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-5.2.0.tgz","fileCount":162,"integrity":"sha512-n5DUPFjRwkTNxAbsfFYJm4w9vqyXgLJ8/XYwhPWCYN+nHvckovxzFaJzwEZvqQeabAMt0yM6nUCY2x9Zjg2FCA==","signatures":[{"sig":"MEUCICrtPvMDPZcx3gt/iJxHkK23JO7N7WP1vOGg58MLSkQ5AiEAj5hDT94uIA3Ea2aSv1Q2b00JngNoTjUWuJi8+RXPTmk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":360753,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXaIxCRA9TVsSAnZWagAAg8YP/RvM7NupsTbmxXN0xqmK\nynsB5OARj7R91pjuk+TQ93YKoXGO3uzi1FxVZbmVL92E5wSmLc4zenAw6SA1\n/iFNC8e62nXSiADvFnNRmC6PI8MgUQXNhE+91dPPhAXMR6r9l8pmX6B+wmmT\n9d+ixEYFTh/mwOj913d2I6uLyztIKvcbs5B58b1NU4ny1HuVZXo3tiwvYYQU\nRmfuHCMO/eNzaNCVPKZgi9tql64kkReuMCWf3dEPpMDKMlAprHJkP1Cwde9u\n6fnZTbWVK9tCic74vBHg9TK7OILkDYOVJFgPGvIi6tYFMm8a7tGLykqvS7fS\nCbS0rRG/2JamZrGh9azfaq2sTf97Hon7eAkNzHoz/1o7zaVf+YnodE8zgL9v\n0ZFSIavI1MmdZlTU7JKSTFY94I2elGqEfuBhnYNmBpfvGjcb1xxbUS9Et9Ql\nzMCEkVL9jtJ63OeA4BDQ+ggtn62YqnTjx/HubGcSO2VF/pPwTcL31Sitw7v8\nzWjP77DpA6GcgCaR6L763J+a5VmNB20sCdGiMFouxK27ULHqQC1LuhsA1Rbe\nwQ2i3yzijpOFoKzfYb/7q2jnWGoQKA1IFA68ywRKkTDCRNhcdiCHO31rRAiT\nxvZdIwJAZImVumMwY3AbM8l0MorGiaFhk2CdNXVZ2600Y28pZinb71L5LAwm\nQ2+G\r\n=1qpz\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"80111fa915d36fc46eb8eeb758f851189470e5be","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.16.4/node@v8.15.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"8.15.0","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^5.2.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^5.2.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_5.2.0_1566417456890_0.27371315618837233","host":"s3://npm-registry-packages"}},"5.0.1-alpha.13":{"name":"@brandingbrand/fsengage","version":"5.0.1-alpha.13","license":"MIT","_id":"@brandingbrand/fsengage@5.0.1-alpha.13","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"sobrino","email":"work@sobrino.com.ua"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"cb893742b7b79b0d8c36157ee8d5b7ba2b86f616","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-5.0.1-alpha.13.tgz","fileCount":162,"integrity":"sha512-ns/MHSWdZJKJbc6YP0cKAx9or1tCVJsBVKBxqV74heRcUTGJhlymYAAelfJY3AHnizvEIZCIJUo5RM8uSf1o9Q==","signatures":[{"sig":"MEUCIBHOlYIRrJ7o9V6TRRwo6vUZp0nrrxwO9AgUOVBUHvg0AiEAoNJdIw2C5/rhmSF5eLBbrMNSAnmFp38A9L8jgnE0inc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":360802,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdXba3CRA9TVsSAnZWagAAz/oQAJ0R5u8GAcwaZXRxQfks\ntnttsOlaJ5kbOXdtXZy1xOVlj1ExdS1PKTR2+Nbz5t61JfVenZJdrJKNjn61\nE/S65oVdgAZk7gVLWQO139HwMphnS4vjmixP/UWpL/DxQ+F6RLVm+gP/nqFC\n1uPOhANF2E2LBlqrFex1dh+XeVBDIKERyxUa425i7O2YifYFimBA3+7or91b\npmp13Iq/5qaeFywMwVHNAraZCemHTZVryKjrW2wkm5eGFyUo6MXZ3eJApCV7\nJu1V8SZBdsBnIamouZl+E645cwIGxIAJ1Wb39tuToakbq0qZ3NvSVjGmP1qq\njqigByVZ1XMCWFMPRHUoo2hT8g2wOZAbAKn83bosuLvq+HBoDccG+Zspfr3D\nR09Y597o9/2qazZ1qg7ya5pRckxV9eC9T8i/MG5S9fwwlzfSYchRRgPNKASa\n07WsAvnycF9BjcqE/pcW5zHGT94VXorNxHZOwsz2UP87uCDPgqhWMhMWNjtu\nD/Gm+kJuvrjLUT43ONTvaLk2qv9UprL9QGZJZziQiwWaebSqSpQX9ZduVxwj\nafAs7Dq+XMhgRA+Ese62knj2zbwQA8usKaD97QTndgRlB14gAv0ZrUPRn0Ly\nC04PlfWfxnhJP1MjuUzPbAMUjTEIXxWYu2lbH/7TEZvJT6CgcDWVdg6oCn+w\nT+ej\r\n=l1Bz\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"68c5e0fe6ee1e4272c07b71d6e2ccc6f8cc84f18","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.16.3","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"5.0.1-alpha.13+68c5e0f","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"5.0.1-alpha.13+68c5e0f","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_5.0.1-alpha.13_1566422711056_0.3833696352948157","host":"s3://npm-registry-packages"}},"5.3.0":{"name":"@brandingbrand/fsengage","version":"5.3.0","license":"MIT","_id":"@brandingbrand/fsengage@5.3.0","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"sobrino","email":"work@sobrino.com.ua"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"187126b6f233879cf4abc550d83f9eb9fe955b1a","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-5.3.0.tgz","fileCount":162,"integrity":"sha512-oIXemvsJfld/r8Atb5gRkF3t/jonXl6/JBPjN1V766WBJBdsaJuJljX5VL2a51UrC1UaWphzE+XOO/vng/3SBg==","signatures":[{"sig":"MEUCIHRIMwCTlfjP/u9CmdLeqzU6MYT+GkSoqny4cFTqlXPbAiEAjx49wSKcZWcgAjpUQoY7wxjZb2QQjodxgmm2MlWdhc8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":360913,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdYCIQCRA9TVsSAnZWagAAqmUP/RG8ozC0G2ijSToZAiK9\ngVNoWeFOukkKVcMP+GCz7JlUobzLU4FtU2KJXd9n878Pe+jXtQ7DBaaew0iJ\nGQkWUehi5CNIQW0GL+q1Wl0v4mqwXqwJoYd0W8JrERoy1clJa/XaH/Sy0nP/\nnQJWMUgUc2gx88u+xaiFrP5NtC7u7tWnexmOdP3B5pxIJ0m6A8mwFaMaHeah\nPN8y86R5LAwcST7wSqK6Fn3DBWmTo11CdYQpLPPSjjh89SlmXXQs5Mt8A+ct\nCwWBAwtV3EaLYRvcKcM0J470YdUToIdXaqIfb4mM/s/9z6lI8o/s9WcUhvVN\nAm//WE9ZYZ0PG3KyWlR2VyZZfUq9MFfMNa2N20ZdSvKlpjtiIWsL0iLY1XGM\nLYazGTfRaF0Yai5YPATz5Rb+PJKwqb4pGXLUgOyVPVtDi900AjSS7yR23n/A\nwCZM1wYT6dyQYjmToRzPf9yRJQvi+ZhyJwUZt3mHX2bdMsCa802I0GCZ67J9\nL7HKjzo0pg4frERr9WikXp5ivP75EamrfhORpAVTpi8x2Q9oTsBu1ALCSB6I\nTzbfqEe9WYkEydHo8u9G5vyeVCkf0WyD/0DKGON+q+v40YiTIy84BNG1sndH\nKNK0b+6rYMN/AV5jo6puOQX9J1TjFWLcEmd+WgyAUuIX/SuApC+xRUCKCIn4\n5/AW\r\n=KrO6\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"eff8c15f066d66eb17d52f9a6a5b59fa08f6f0ef","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.16.4/node@v8.15.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"8.15.0","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^5.3.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^5.3.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_5.3.0_1566581263853_0.6676436627062101","host":"s3://npm-registry-packages"}},"5.0.1-alpha.14":{"name":"@brandingbrand/fsengage","version":"5.0.1-alpha.14","license":"MIT","_id":"@brandingbrand/fsengage@5.0.1-alpha.14","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"sobrino","email":"work@sobrino.com.ua"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"01fb6c574c0c4396b2b2e6c811a320af4dd1eb7b","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-5.0.1-alpha.14.tgz","fileCount":162,"integrity":"sha512-QigHdrTRo8ZZ1hjoabwsrJPONhl4CGgtnRipzNpNlnZZ9jctm4u9Bh9ryxfIG8uFlNXUpP/RXasXgb6fs1Uhhg==","signatures":[{"sig":"MEYCIQDirHEjjsBbdatv+Dc1W/WP/vHPiWHYMY8jafhQ0DnRKQIhAN4U+bonr+jP6Wg/9coNtF2Gtb5zPgPuc/FmvJV3CHZN","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":360962,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdYDKlCRA9TVsSAnZWagAAiEMP/jrqbdss8TAEeACjpnVx\nX0pM5P0hnC9raVUCTEenLomp3yv8lSnGIa7p3x35eENhFUldn9Vlxd1jBiuT\nw8B7pbEYTFKgU94V0RLXM7I9rkSbXt+Bra9tW1HtAHuCVFgNtH07hh3TvHsB\n0APMtLhcS2+z7zYrVp4zZZRIqLvXOniGDr1rit9VZkuzZOYACH+wBQbz+4wF\nlIbdqdYLu+fWBKlmIo4JL5zTcvM/CvfUlRaiPL0WfaKSxu2FfOpEyC75kl4u\n8g4bvPpoUIocFBTsEVMtzA44CCYaK5zaxl7lRGl99iTHhNjKzMzlEq4atbiD\nSn7MOS7RUW2Dx1vyt9MhERD8uoJiBgLkPxN/JRx5rR30zM3KOtt44pZeDGzQ\nKri9bxEWKziUpB05TBWPhAqqtZWITTCSM06d3GjrV3nfTpL7pF5lRZ5bVizf\nCqMn+kw8DcoesIBuhVv20B18BUw7sAowvykMmtWezYsTYyOKGLfBiwTseK3X\no7tP7M7Ehz+ttIEzh4xa9yXzOPbpHPYvDTt8D/56t5a/Yzon8G+ix/pFiyhT\nxVW79tlk7oH6OlTAcVt/FdMuSx2w8tO9bjXMPK+7qILzmy9DxOzS645oVUU0\nkNLbEdiVL2qlGFPXYGjG3igujy4qUcWOmtBcGSQbV4yMR4rq4bCduKsRI56n\nzjG/\r\n=c6PV\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"4f4138d02d1f4071040abed1f95d522fefec27b5","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.16.3","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"5.0.1-alpha.14+4f4138d","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"5.0.1-alpha.14+4f4138d","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_5.0.1-alpha.14_1566585508611_0.5392348881641564","host":"s3://npm-registry-packages"}},"6.0.0-alpha.13":{"name":"@brandingbrand/fsengage","version":"6.0.0-alpha.13","license":"MIT","_id":"@brandingbrand/fsengage@6.0.0-alpha.13","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"sobrino","email":"work@sobrino.com.ua"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"2094553b529567dee4b051163e48d105c6e376af","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-6.0.0-alpha.13.tgz","fileCount":162,"integrity":"sha512-52TypRGjKJARAVIM/S9LSGYgqNv9uywl7PoijuuY0dYsFdXR6Cw2Mfp0J+HZYCuhtSlimJbT48AscPeJEG/crg==","signatures":[{"sig":"MEUCIHSU9frDMVoAUNR5Wh5bSVaQXNSmg3beMDgNDInRJxlvAiEAx8TIcVN8YlQGso71LpEeWRO+Ty8nDAsRTFtwJgwyFls=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":360964,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdaBoMCRA9TVsSAnZWagAAxqEQAIZod8po5OZLwFx194gF\nnGsKLl2ioISJ8IiwRdwL2ElJwyIscsn8vPAeR/zy+kAbhGygW3SlZHkfUdZg\ngfrl9FNhXlOTovUFAab/UwvUfBo5mAXts00Qblvy259k/RcB1CGaUZGNI6oN\naGjdpJO/E7TSpV/QvoaS+13B+XU3sXHlW7P4mKFNQpofUpEtBSlKXegVKygY\nodOhQDDZ9TRHOeFRhQTzheeizImFVNcbPSFbfUbuP5hZpSsIfvjyrSM6W8LU\nKq3O0lT7GvaNlRAiDGep/s72fXLSuS7voiNIyGv+AtZZ0sCy2uUeHQC+081Q\n5EPZ2oyXOCOSsfWuTmpQX6CW6oZaQb/4A9waN4Nw5QKXcsa536+iPBVujij7\n3k90JGgY0SpuFN//dDCrpeuJcRayjMz5WY1O8MT8l225DXUZTOjhHZv/hG/U\ntoD6EW3Rybak/Xq2tsnuNDcYO76fniOT6jUGOeIxGDoPSbIU5THFAUjXnk6K\nIwtU9yZnErm1OZNc5MHqjw4a06KZq+jn/zlkygtXFu9zFnXAu3SN23fRZPqR\n5aR3YaxXOpNpjgEmhXqbHlHryIbx3VWTf2ASqtdPb8uC646V/i5mcVrxjLUT\n8/IZbKhocu4qRB5KxCvY/s222g1rXlhyFOPNu+X9FpNHqZGID1HL+/dtf1VG\nDztq\r\n=Aq9p\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"f4db3b615adba6cadac5df20daa2752bfcc6b893","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},"_npmVersion":"lerna/3.16.4/node@v10.10.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.10.0","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^6.0.0-alpha.13+f4db3b6","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^6.0.0-alpha.13+f4db3b6","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_6.0.0-alpha.13_1567103500255_0.8680982559326667","host":"s3://npm-registry-packages"}},"6.0.0":{"name":"@brandingbrand/fsengage","version":"6.0.0","license":"MIT","_id":"@brandingbrand/fsengage@6.0.0","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"sobrino","email":"work@sobrino.com.ua"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winstonkim","email":"winzton.kim@gmail.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"00cc6bb07ecd0fc31f240b0c4036b4b900eee6e5","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-6.0.0.tgz","fileCount":162,"integrity":"sha512-3AVQb/ysp1Q8bLzAuKQXVhxy9/B1SWVGnhFEhTB+vV+r2YgQNPlK/mhPjRbK1KlrFNgFZ2FdC+4QuvHGBcDhwg==","signatures":[{"sig":"MEUCIBv4YtELEmaHLaxNQyDxg84GK09egv0yWeD7QfLJQBPnAiEA+LdrxwJYgnY1gD2H3/qdkG27OZRRXq+8PDC/pBNOWgg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":361073,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdcCngCRA9TVsSAnZWagAAUZsP/jYmBZZ9iGHrUrJEzrVP\nZUFStUCFhmNk+jvOdhqSNZhwadU/TUMmfkanmfT1wFfEYqYRukbVbrpZjFjN\n/F1dLuTL8EiwiUKC860PuHtWpm2HmpKEO4kfwhvbehVdSTxhGaKJS2YcEDEQ\n7LUOalKqLuR9m3guFxnCL+S89GKd0AQW/OiOpSRJPZAvSeNDknRpcZ9FiYMz\nKIHiicbMwOLhCHb34whnchFT4Wrq3QL3JWWihO8qeW3JwZPoGv1ivFCdIRKi\n7m/cS2yCtsifVm2bYQcGcUAlPeByt+QoHc+nrsSPfHk9fZVEaeOjhFXA2jY0\nQV9ja8UWBjiLYOnVhMCE5y7ahx+Z85HPMVYm9kyUttFujpp697BKU2RUtCAp\nuAeVfTiqIYStaU4ZLTToeW1G9kDtHKvKrD/nHlS0S+vv1NB2LGJtcnDbHlUT\nWmgZUy+UR3BTLwKR+fU0vTpJqkip/2DO3lXI9I6xT4HS+YfoEZFb+FGwhBS4\nlY9WWgHRcFx3DUOhRGoz/tDDf/epGEZJ3p95HtVZaEoWZL+v1dKadOQuxzjz\nevp26Pkf1KOD3IXfjbS6Zk5nSTF5yQPbOvTF/68dIty2lHCjkctBaYV2O7Mu\nrGmMxHYWFr+GdfRlXY18chvB6trx6/laj6KpvX9Dnk3A0OAYXL96rYGIi14l\nu9cT\r\n=ZKEB\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"3f87052c40a138e8a0653ff97093a63bc4812540","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.16.4/node@v8.15.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"8.15.0","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^6.0.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^6.0.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_6.0.0_1567631839209_0.3594145176213326","host":"s3://npm-registry-packages"}},"5.0.1-alpha.15":{"name":"@brandingbrand/fsengage","version":"5.0.1-alpha.15","license":"MIT","_id":"@brandingbrand/fsengage@5.0.1-alpha.15","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"sobrino","email":"work@sobrino.com.ua"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winstonkim","email":"winzton.kim@gmail.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"d159057bc82e675117227a721d445cb169e53d6a","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-5.0.1-alpha.15.tgz","fileCount":162,"integrity":"sha512-i80NTQVYHe+gKEQJGR2Y5bdmDBLNoORFcnPWW0ewFo2fDXF6sqGyl4rjjNJJrBDaz4wZp7nIkpoyySKQQfeMvQ==","signatures":[{"sig":"MEUCICFqE0yPdN4dqExq5b7KEgsnOotQo5m72Y8rF0Bo7UYBAiEA5E4D4jFyBF2Rg8hbK0IB7EdbCyYS6QRf7SH9wx1gHhg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":361122,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdcS0GCRA9TVsSAnZWagAAfz8P/3kTrSlqLb+ainwIr9rV\n+fa8a5pZ7qY+EDyc8paaKo7JxXu5YpZKwwbcH5/XGJtuMfhqq2pJvnHxMj+T\n0uTsaYTBSYJvZMpnc8F7KAUsV+B45ufzLnxebuC+z7DVQGQVjVfWFFNZn2la\nUQsIVFQVVr1857/Hm0PfFVkrD+qy6MUha3yhFHHaLJH1x88Eme9RIWSiy2Bn\naU2mBuMwiu7oPjwpEjkwduqgEjW1Hces3UfqTpd8YMNR3yOsRKFrTlZHhvT9\nazZcbO/p1Fr095egBQP4w0VArMidXMMdQgGvoQpzJwlYIDbnjjOCobGi+tvZ\n9MgyfmXfW3ZbAGBpnbDeO+YJugdaHQa0I0B5mEqKUPqNMJ0D3Pi/RQkwWfhl\nadwqjC92uVzWkpJc2p1uFQ0osH79VAK5FqsM+LXdabKNw48RUwynbLfZSbox\nyJwiEXuj8PJN5ocs8ZbF1PmjOLZNUvL1dYKX6TxsJ5+M8fuN7UbcArqKXaFV\ntJO8X/f/IBztoI5iNcSlWUTIWxQS6wcK0j3Ls6cIPSkLA9mR09OaZdag37a7\nyNhCF6QnZSJmnPIarkKh2m3LcfKXkGLzrzfllN8ujCbYFSzRVx8HkYl74T1V\nJqJ8RTiDj1YBRR+s2zNOhSlpv/xfqmfidLDkGymU8Nrk8fdIwQITtXl2DBUo\nb7SP\r\n=HxhD\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"6fd651c9d1046c509e8f7d4dcb6c3f12c4f89ef3","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.16.3","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"5.0.1-alpha.15+6fd651c","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"5.0.1-alpha.15+6fd651c","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_5.0.1-alpha.15_1567698182191_0.8531895527664075","host":"s3://npm-registry-packages"}},"6.0.0-alpha.15":{"name":"@brandingbrand/fsengage","version":"6.0.0-alpha.15","license":"MIT","_id":"@brandingbrand/fsengage@6.0.0-alpha.15","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"sobrino","email":"work@sobrino.com.ua"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winstonkim","email":"winzton.kim@gmail.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"f07e2adef30e51d5770153dc5aff59c5450f405b","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-6.0.0-alpha.15.tgz","fileCount":162,"integrity":"sha512-THm7gVUmFc5W/pdbU++D8MFcrrOZp15txqdEmRZAYU+qZpmbecQ0i1Ayo4rayL+aNlfhdIHYrpZbci7VlniiiQ==","signatures":[{"sig":"MEUCID/gmRAR6xjfsJc+2gXZmcFFVegr6HURDUhotgRq702pAiEA/wjt2o+VwI1VBEoNfNphKK53xfUaWf9A53jFtO6dGLM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":360964,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdcUsrCRA9TVsSAnZWagAAXJwQAJ9H7YqbG6HC2VXOGB7R\nrNsvhph0MhD5ZUNu1j3jjp0+HCkiuVCqVD1VreJt4faWRYgDGZXhWaHw2gip\nSEna1cfi3tJ+bkGkJTlABaw/nUJsVlwKv3cL78My6malTEC9VNzKnOt22ewz\n2+bLsrkQ2nBsixsULnUk2M73yiNjzUC8JDmLJeK5mSnfwBM+6E4P6u3deZ4J\njUfNOPu/FBWUMJubI9VMhYHIJaFNPqd9CatKCHM29Yp1+YSen/RE11Bo91cK\nQJ+laVZUc4f8uD5vdr3E6SzsAmBrtKA80cIiLmt16qG9KCNgDtlVueSutyfg\nygaukffwPv+RqL1Iau3QkWx8tqVfnThj8VZgHl/hBEv3wYpGj/xMWgUQiZMx\ncRcOA5sKjM3tKfb2vXt0UqOXQq3c9QRuZ8RDrsiJr/UpS4qr1y4zHiFkz8hv\njKv6Zq70/ejLDE0j5ho6PBSkFYif74/HTem2yi8nXvrvDaW3Uv7p23X9IxJA\nd3D8j7zAcDlMflJ6fGj/GavsFL570OU0l8WJbGETxAVpgeKI65+fF3W9wAi6\nocpD3zIh4k1uWlAIhuERudIeL03YMLSDy/fDRMKQaHpKzmSfaFVQ1LvJ9OpT\nYF8oGY7byjyzwVLwyotwbSLOK6HdU8QMNtH4jgjSjA5ucA9rDwfrWRLVDcYS\neVH1\r\n=pCcK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"80685a127d8b3ae98b1308970eaf69c2a3a90dec","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},"_npmVersion":"lerna/3.16.4/node@v10.10.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.10.0","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^6.0.0-alpha.15+80685a1","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^6.0.0-alpha.15+80685a1","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_6.0.0-alpha.15_1567705898883_0.5334353097834272","host":"s3://npm-registry-packages"}},"6.1.0":{"name":"@brandingbrand/fsengage","version":"6.1.0","license":"MIT","_id":"@brandingbrand/fsengage@6.1.0","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"sobrino","email":"work@sobrino.com.ua"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winstonkim","email":"winzton.kim@gmail.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"7c12a600d028318a5d4739471d5842cb5331427a","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-6.1.0.tgz","fileCount":162,"integrity":"sha512-UT8ca+oW8oCHYINVQx+eRcjJABFlAJlxAqBczz6VIZt0TWYKCqHta3d1WTu2QLviUjZj6qrVMZbV7s21rFmgWg==","signatures":[{"sig":"MEYCIQCfClAVAP+llFw/bbF3jPKcWbsMhtxSLPAB84hKLCJ8wgIhAKFGddUsRnF+4ckYjONmJ+t0BIVDITMlvbVOS362Bu9f","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":361233,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdd8TWCRA9TVsSAnZWagAAaWMP/RZSCEanQaK4/Zl5sDKV\nVqUQZd7uN9obD8D0p9ouP14pgTgY9TuV7G9w5aplylnKz1Ewb0f+8jvHrhDL\nAZUJyHlFCI+Pmj3iefU08R9/71YnEgF7g+hH0OIgi1rYGc9EervB8Zj0FKdh\nz6SWXdhugC+4sC8B9pWKVyvlf14c8q6E5CsAdIIRk9Ge5l+DGcF/FD3zSWKf\nHJUJF8j/ns3BzZ/hFqbVOG/dCrgLgLamE1UiJ1XgrPF8UpEPLT+bKu4DcHyo\nMzi6D4DYfEA84cd1ycSaQ1AmLVIs6gy6fkquzxvqYH4wwPuwhoROiTkGS3Hk\n4yvLWMJdq91W0fwlH/ivxrs9xKwqiAXUBtWAbqITBzzqP3VSklgC/P4xOMAL\nvId98bb8aYnVt6noVwy8xz6b4yHEThl86Tedwl5Fyipulq/O/d/kFWR39GL8\n6CeOB0hXyJcm+XrWKEgdnGqyYtRY6A1x1asS9tWlPsABclGI4M7frQE9+43c\nRZrviz48rNeuxjZoRXxq7Hfp3nzf8M3k7QzgKR0n0hViYT2vfyvgQThLLju+\nOkqHXC1burSTKaa+3bdzjJWFI9QhvytKUiH/Jo2xmZ2lvR0BNUT9zim93US6\nYdlLvNWpfd1MaHlTy+/UwInGchMa/Z2gTlzKgyIneln4m9smWtrhPT+eyjJ1\n5Msb\r\n=2++v\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"f398932dec2bee3f8a3eb06933d18972562ddaeb","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.16.3","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^6.1.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^6.1.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_6.1.0_1568130261285_0.003069908912674446","host":"s3://npm-registry-packages"}},"6.1.3":{"name":"@brandingbrand/fsengage","version":"6.1.3","license":"MIT","_id":"@brandingbrand/fsengage@6.1.3","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sdenaci","email":"sarah.denaci@brandingbrand.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winstonkim","email":"winzton.kim@gmail.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"bdd6b96328d72e9409e28fda549e6e3d04ecd46b","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-6.1.3.tgz","fileCount":300,"integrity":"sha512-v0OIiWlZm/6TTguz/5zTAUW4NY/aG1qn4Au+EQ0YYomMPSO9farfHGPVgTaC2+QbGFx2SfujJMZtiEpDmkwE6w==","signatures":[{"sig":"MEQCICfLEzyytmOKdBR6GPAe/0WHd4R4LcQVfpjPSInPTh/zAiBXiRy+pU7pTcla8f6iIdL5mUIg2M3CESS50RnnuK+8/Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":592735,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdetAqCRA9TVsSAnZWagAABW0P/03C6Exz++mTfX2oioju\n3pNSl+O7DT0ksJYaRT8HyA0107hSlaP9qO6HKpb7+ziB9NtDXJCZASXc4BX0\nBpepXiCK1tW8PjyEzb44CrzNvIFl1g1kEoM2fRUa4EAVvbYGPsgaHdqpC8WR\nSMF/tT8tc2RKzCj/NPjdxsjlJpqzmVP+f2pqFUNXGta19f47k0haTChtnrF2\n8l3E9adU1X2a/g4VZ1vAQNn/fZwSz+Wfu3DVrh72LnkmokuVeYPVLfHTppNC\nuchm7ShgDMninmGH3qPXNo6obnLhM4Jzr/22QVp12ascCsIpDYZoeSdc1gYj\nzHCu+yr/gqcUDVbo/oR4+9T+Mac+NDKPzGHe2b3EtWZrW1Ji7YLHYG/Fhm0o\n+lM+FBvk5Sg/tZMngAjtdatjcBr6UVw7YRvnBXAXmH5XcfZ6T6j+P2mXYjUT\nxsxqeV8I6oxmQRSz36mKgzrKPgTDVQsY/yisNEAnjXOZI7ajqPyR111mMoWh\nisPkZGwcNhUEVk03EJYMx/LU0PKTTstCwnfKuPaUdrFqZtXuWccEGvMgaxVN\nVhjUi5U0FL4IeiY1wgv+cQj042mY0fNPXgTm3/CNsoaALURSSC+wanx2xX4T\naCR9W4VysCKivtYhdr1EJMmdrmmZc7mu1TKNrqX3MSYZh/qiOzx/zV+shoC+\nDyrM\r\n=ZQIA\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"7792360305c7a66502d16f33d4502f75ba08b1ab","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"cauldrath","email":"ben@brandingbrand.com"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.16.3","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^6.1.3","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^6.1.3","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_6.1.3_1568329770062_0.7680760328381961","host":"s3://npm-registry-packages"}},"6.0.0-alpha.16":{"name":"@brandingbrand/fsengage","version":"6.0.0-alpha.16","license":"MIT","_id":"@brandingbrand/fsengage@6.0.0-alpha.16","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winstonkim","email":"winzton.kim@gmail.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"919c309e41039572cc59b1b81aacad3800eed440","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-6.0.0-alpha.16.tgz","fileCount":162,"integrity":"sha512-h00FZ5zIUx2Xpv6fWE0AfBk6+82mEBBdxeDSKhBytwoXnjXyfmoY1NXxriYC8734yptCXXciRsVduk5z62VlbA==","signatures":[{"sig":"MEYCIQCWWmjMk2dKwcxYjsOaV8UxKlD1qzCkRYAFmiRDuiVnvwIhAOkJVUwX8k/J3OVju/N3YACEbalQ2/0kMZscqm/2EsY/","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":360967,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdf+9zCRA9TVsSAnZWagAAf0MP/iVGqm3aQC6Dt2HG6LEp\nUbMMiy2S186l+JpezOq0jwr8UqjHtTUeeelAZXB9upP7Q4CzByV+0lwWbFrt\nEv+iGOsUaNjfJ+HeimgxiEvW9KzqMCf+HE2hZw/P5zwRujYZVUfZgAaTNQAX\ndTdDP7lYkODjwfXRVy2edWFQFpe3iU+wZICHEJwpIgPbT0jzS2MPJFHi3YAS\nWPx7E4PU1Jiaaw1JlWgcNXbA2ON382e/KD+HVCkjREifraH0r8wz4dt1BWHS\nMDmRIFoTPKIKjZ9zAJ371wr0GlD4SG8gIZc7z9J7ThiQX0ibMRxZTmhfCDCc\neyjzDWXPHgDp3wCQKLgQF2bcF+FmRqIgAekG4ZqiG3ADNzaAtA6lFNbQdUTs\nml8NqrrW5B8m52WuYTFsef8baIw2rVgRchL2lracHINHQLseQ9ef9jf08tPc\nsxDK0I6NDSp7DRBTty6vodr3AtC6GUOD0OEHMZubI3mtKOLwitDGrVqNiw6b\n5ekChTAwFkcGy4Q3FpYtjd+HShwOwhk8s9tU43Z4rp1hMa01tK9gdvvcK8sw\nPHHW79QNwEbszmLSymfdAgAmCMmmChNuAq/I4it0wKhyrXvuCz0cWgDVIiA6\nxX0aJtW0QYea53XgPCKCVd7xXbwkAVlXtcANdG/zianpthmGt2gjuCShjIAm\nDRaB\r\n=7BOo\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"f009afc71d6a484e51d362d56676f3de801c9e28","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.16.3","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^6.0.0-alpha.16+f009afc7","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^6.0.0-alpha.16+f009afc7","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_6.0.0-alpha.16_1568665458766_0.020561312422435085","host":"s3://npm-registry-packages"}},"6.1.4":{"name":"@brandingbrand/fsengage","version":"6.1.4","license":"MIT","_id":"@brandingbrand/fsengage@6.1.4","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winstonkim","email":"winzton.kim@gmail.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"3b3969baf38761672f636cd68b98c16290eeccac","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-6.1.4.tgz","fileCount":162,"integrity":"sha512-S/WRvcBU2WsygSc4oTgO6blYkIqKy0j+YatvfCSqLYR9GAHj6dvcW8mIMqzZ6PAk/Uy55Wa5U5iyZm0m4mpSHw==","signatures":[{"sig":"MEQCIDaaUv8IPdh8S3n3FqdF9EpKRWU9xCIUqDaNJqZZSydcAiBiHDDEoxzTSMczBDL3iAa4yGFb6PE4sQnHURqS2IIlPw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":361877,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdgQajCRA9TVsSAnZWagAAr4wP/ApcgOgText9/5oltgmQ\nGtdJaekl6uS5E0XbgjnM2/5+/R0LR+4CH7QuTLc0LozgqcM0PTXn+Ozv8qNL\nz9ymFSVrU+d0+PykEctunH2wXHiCZMqd2rOs5/ILmIx9VcqN05QkCuH0GBEv\nbYHremFVptOZ2vuVqBKwRR8rYqgLufa+HX1j2Cqf0moTYaVil590NMA5WI+t\nx+jK0LJ9pOBcS/k6u/Miux14G3ksCQgf+v5uZrBfh4lhHyBGt2/+2ZlxHJyT\njzYyFT0ZJzQkmjEdpoWcZ3A9Su7/6QWxBuDSY/LhtXQQ8cFTZttIK/hFVkzX\ntrhGMAITuuUn7YsI3G0HWYY/CzUa786OQrkcHWFYPkvJEy8NRdoGN91SZiz4\ncV/Oe8558xQiW6TcbqN2Mp0rARZAJLHtlBq9Hu4qgiImyrrlX2o0OxkNaQF9\ngGN5Sle5Ax1D8MZXcVMmcI1xPiOdyKVaia9qMMu4p+4TZrmFZosGuN9JbdEY\nHqqIF5eDp2i+0zURnLfswhWTVD/7gKcB256B/c5PvyaNc1iIfDAJ0jDLCcsY\nwY8i+3CADKsnZqapmotmBOkz4Ed8q9TdPGOmawIrHAIaGpK0XV35t7jNkxN8\ntUED9Ikn8pmx10JSCs4B/Weo238JybtxsHrISCYUmy4yGkyatQ2qkjX3grr+\nbD2O\r\n=Juqi\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"b26dab68db1eb0786520d33541212b0c60834354","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.16.3","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^6.1.4","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^6.1.4","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_6.1.4_1568736930646_0.404744668200439","host":"s3://npm-registry-packages"}},"6.2.0":{"name":"@brandingbrand/fsengage","version":"6.2.0","license":"MIT","_id":"@brandingbrand/fsengage@6.2.0","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winstonkim","email":"winzton.kim@gmail.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"66fab1a5f4a5eefbb3bc01bfcc79532b74e8f248","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-6.2.0.tgz","fileCount":162,"integrity":"sha512-UPV10l310f2YgoGCJN465w7wqdwXL5K9p9FT8r38S6qiUB4zVu4/Ihf5G/M5E0hhwgcTXFVbQtF+LeTFaWbTlg==","signatures":[{"sig":"MEQCICWkpVK1jBk9YMyo6XStGOURkKTmR4dORkHoYRnCR1wHAiB5tosHK5ZEzDbZlOMymhPOGmqi6VW1PfHbMOisBvZzNQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":362037,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdg5BDCRA9TVsSAnZWagAAWEoQAIKUgorDozE4guyjNkge\nFAzGOXBUmVQEel8I6xMukF2nRvPrXhsa+ZsdJOnPEomEaCtR4OsqfHLI0V6q\nadinqE7ILBpV/5TubN/yGxIiv2XaJWt87oKGIB69aWwkgtqaaYpDzd0cwvuV\naFhjzOEDGZHe+1AbBDO47zzws0AsYh/WUifUV9hU3PCgXzV4UvaGOKU11Ohv\nvY7vbXxdSe6u+1n/NMOCPdWbJkxTWuG/W5qBCD42MmgaLWADY7j4SfALQHTN\nE3ffdBdYA0YoIArSSO4aiu7+LpEhq7uMdzHa/RjIm3EcTIlvgSzhmx8VK2Ux\nJksuctJepAjlbp1T+Dmfwe4uJrYjkl3fTbxQS7uP6tBkZ9it7R2CbvGP5YnH\nhcMGvS/L5EiKLf9sGWKBcy33HXIVuU+7lnP70VZn+hyEz2S64TKfqsZy7BkT\nMNVkSvcLN9llOU3MdWkNyDSdXyWgDUPumilDi71tTl6Tj0thlVp8RmSs1ZQI\n+0uOlvcnuCxFBol85s6DoqbbsZH3hFbVP+r4moN4ar2/NRsJSDTLw/R3k4nx\nC+gECOGQjrD8jOh2OhTgVhzglKn+aSdCmLSxPavpoWeHguSSSdnDbDVKvreT\n5Ik4gNOCoLX1MSeGw/sWzonNOflH+5cye7Qpe8JD7w0pKymJq55Ekzf5z10e\nycEG\r\n=CrZA\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"c31e061c02a63504f4807c09fbd29deca74e878c","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.16.3","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^6.2.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^6.2.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_6.2.0_1568903234451_0.5431681507934696","host":"s3://npm-registry-packages"}},"6.3.0":{"name":"@brandingbrand/fsengage","version":"6.3.0","license":"MIT","_id":"@brandingbrand/fsengage@6.3.0","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winstonkim","email":"winzton.kim@gmail.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"c0977fc3453e35a96cdef3fb6a84e1c91c2fd054","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-6.3.0.tgz","fileCount":162,"integrity":"sha512-tgU57ugDOrVP5snoXJ+pPpv8XBJwvcxgn1ZowuJU3ZQg0IqlWi2FRs8im9s6zlB1LtD9H9BVn5a0hKrLvu1WZQ==","signatures":[{"sig":"MEUCIB5xd/YBDMFl6Md23JFvWqNf1SWq06b3RTpshB3zpWXNAiEAhYY1WgQvV4oK2RHRwv7WS+2L1J8cFtY7HTdZS3HsdYg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":362197,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdiRQQCRA9TVsSAnZWagAA0G4P/1mt51PNPZuS/AHJngG7\ng1HkwNQLZLtYwgYxJOyfXIylUG0ZlaL2pfhEMtUzADqKsKiCak4ReMyth0D4\nUKaN3hsAjNqewOzMy1gMW+eBcH/AivOq++K9/K1HDsCEukpc6CodsneD43le\n+MW3gAsoGmxqtAQztxr4MnrbQ4SR9xRb6vHLajg4vppe8WlPti8mm6lT3/Mz\nRtLt7kje3Y1SzYuJTyiLOiWwcoeE3xBRgYPFicbkpMIaZbHdUORfBTFyFXhV\ni8Cu4MPFU2rGc17GsGYL9Aqj/JN53SnZXSxS/QLTr+xbjN0YfI0ckhwxjYlG\nfbxvJWzQaIpK1B+WXfHtIqA7Qt+VLQKLc/YwkvBHnBKZoVwb1XjMkRnTbJKY\nV8cuSXlFV6+8a4zAyY6bMsv0qpvlgnkh7TS8UuaQnBMAffodk+SyasmYIdea\ntaaxdOmIaFcC8SygNhXM5PA+k51ZgWwSI/CPnhNbjJi59mbIIimQgyzqPGad\noxKbFJnVFfW7c8hE/W64Tgm+jt5LxYKAUTSd28eCHF5g9D4rWpDne3nKXwL8\ntoXoCBxepd9/gBdQfFkE4d9f9SkT1pXlyDo05pmX3AThtcb8YTYs42fz8bc8\nQee3jhh4FbZBV7kIjFDU+jW5E49Xc44EtQBmjFwdfscovkCBIN5+sKrwNfvw\n5DEl\r\n=bXsY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"1b6cf546d051d132833a57981b9133f21324da7b","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.16.3","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^6.3.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^6.3.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_6.3.0_1569264655167_0.4879585067648815","host":"s3://npm-registry-packages"}},"3.5.1":{"name":"@brandingbrand/fsengage","version":"3.5.1","license":"MIT","_id":"@brandingbrand/fsengage@3.5.1","maintainers":[{"name":"alcschultz","email":"alcschultz@gmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mattwinwood","email":"mattwinwood@gmail.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winstonkim","email":"winzton.kim@gmail.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"62f357b331a7f60b3056ef0865110651df246430","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.5.1.tgz","fileCount":162,"integrity":"sha512-j/dz/e6rZ265GS0+0eqUgMZUwx5EH46NkgXt5TKrWssCdbaWc+s6Yph0F4+bN1zXFZbmtjbyO8kTeYxHRXAwCA==","signatures":[{"sig":"MEQCIDvqVcmKGhViiA2uP+BHfbkIGhfbOvj7eM5Kf3c4yHCMAiBu41qMXnRqODM4/mJR8BwCwGeosWUMUje5E/XbkdLgQg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":359413,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdilC4CRA9TVsSAnZWagAAV7EQAIsVOfadtVmi8oiLp/QN\n881IY1ythKJDF4WJhiRuxZxvHgI3agn2RPtptGqX8cnWjY8xQ3tAsFna4/kg\n8VGkN8TGtRR8idgiK/2LX5PRLyCVzt8wHbv5AjSwGzk3uy1PYVo0KCd6WJmk\nWhrpi3hjvCfem4TL1BHXI5xCgywbXYkyfZKGksmMlKnv78rz2hs+qjCsBMeQ\nclUdJC57KNZkFJJ77xflUSAlOFVJNAblvNzT5Rej/r8ZFVyJsdWgN6E5WLaI\nXl4zLidvmcqxa5xsbeYvsncWYFnljTrTzfd4chqiVNaKG1/9MAubhmQ8Kdf3\n68AG15tXOWoG5dytIffG33IBn4XGfvluHl9vWlVfF076v03uU2rzPM5kt6kH\nMJb5yvIbISrIdb9LoBccMyA0rFcXRnuVsYkV61FSfPNKEXqSCR/nL0wCDplC\n6qiKZZO5ZRsgb60BMfF3BoLg4B1bwjIbjrR0M+lR3FiodDd3vMiD18h6wfOa\ncUNSJuqZOAO3IblkwvP93IL8BIYPJPb8NT8AxB5WgPEeMaaRFtsrc//21KWS\nyGy9nudAtTK2ABDpyQXafBq+KVndSNONDv3/qMEWrtoMd9PuBJJhVPcvwmfS\ngb7ct7VX/pvL94JncHxgGbcMyidVFYCHjS/P8JyoRfHIAO7zpD+FKpQ2XwY0\nBP9J\r\n=jt0u\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"5f7205cc7f590f6963e20940d98e66b2ea7f7ee9","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.14.1/node@v10.16.3+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.16.3","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"^3.5.1","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"^3.5.1","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.5.1_1569345719413_0.29531642382785717","host":"s3://npm-registry-packages"}},"3.6.0":{"name":"@brandingbrand/fsengage","version":"3.6.0","license":"MIT","_id":"@brandingbrand/fsengage@3.6.0","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winstonkim","email":"winzton.kim@gmail.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"00d4d365c8c8b1da38c5065bb7b07af65c15b772","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-3.6.0.tgz","fileCount":162,"integrity":"sha512-YksAcTYrZcvgwxf/gMzcv6UwVkRZcDqQEaRDenXIngEVNFxi4rCH1qO0f6rE6bgU+w0FdecyenmQfdRy+7P+8A==","signatures":[{"sig":"MEQCIGpyf6a7U18VUs4ASDd4IxTtcCSPgZJCkyfK6YJrkOkpAiAo7KslvxDgd1+gDTbFLXj1rmx+oxXLYQBb5PBJX72Fbg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":359573,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdjRVOCRA9TVsSAnZWagAACHoP/0sHB3cBKrLvnyE77HSf\nM+SdThKZH3TlLanooUd7XJv05iKSr+g4K7gNvH80DMzKobynCU0GPPuCQXY1\nScnSHiGFhcEFbic6vj0TbI28cgyq9xc7DaBoEQANOWodTU+Rl/yr8bsI7xTk\nljRi2QRh7HH8DQzNJu6z9foIGT2dgdG6tmmqtY7Stlh6mlbZMSILKdSY6Q78\nYXz5+FahNqvGXMU08NLC5A5mYD+c6AOnlR08JN2sCGFCmAZTZHzc0+/vYny7\nOXQ2Ln/ec2T5BYJDafar1D99Uyfg6CgNdkT/+JgmxhvOG5I6hcIG2vSAc0E3\n+wxyB2JmR2/rs9LeFdGbGldWUNVDH8oUY0r6iaE7IGLfckclb335jh487gT7\nlTtRf46PRyzXz4ouSQprjHmbYWM33v4An9ILwBnvLqfe3mj401D8OPbOMhH2\nxTFchQDrl5wyHnjlzIJfIu5b4CdqWi2/LX1Of4vUJMzzQbgCVq/Lul0JvLgj\n35W+T1lkYLfH7BpE2Fnt3jaoHoJpNpGgsdEgu6pCPihnT6EXifCO7gkjC0/v\nje/XgpKh/avuzbs2TER7GqmmxMQFVjqijZEzg3TkX9f4mMOHeIZGDOFuvmpi\n48hc9OjjtRHzW+BNimqnw30DCTkw/vliBGhW7TxAzakQ15iN3SstVTDJ+YWJ\nrXbd\r\n=DjQQ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"7785d084985a9844e2412d5ccb33cd18d375ec0a","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.14.1/node@v10.16.3+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.16.3","dependencies":{"react":"16.6.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.57.8","@brandingbrand/fsnetwork":"^3.6.0","react-native-permissions":"^1.1.1","@brandingbrand/fsfoundation":"^3.6.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_3.6.0_1569527117510_0.18658981377146522","host":"s3://npm-registry-packages"}},"7.0.0":{"name":"@brandingbrand/fsengage","version":"7.0.0","license":"MIT","_id":"@brandingbrand/fsengage@7.0.0","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winstonkim","email":"winzton.kim@gmail.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"a16145836c21706c30a5e454c51af5f5e723e6f2","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-7.0.0.tgz","fileCount":162,"integrity":"sha512-S2QxTK85AemzXfhYOnhZADi2BJaiMszobWjL2UX//hEcffyofG8SAibpr3Nl/dHZ+urbmgeAM9NZxPcl/MBOVA==","signatures":[{"sig":"MEUCIFaj0nGmugnRXL96wTjA0hZkc6Aw5/VzTr/HzeTi3cn6AiEAygs+HpDyHc5fGdDVrsTw1gs88SSobyKtjzrdm49ekdk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":362357,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdjlAnCRA9TVsSAnZWagAAHccQAJRwh1x64niKFi7pn7uF\n5CtXLJPw3lr5fz71maty4neHwe0n9cIxDl7qgNMrnqPa4C9MzpfJcIKyZ+6e\nd+08dOszyMwmuQr/EoZYIWNiq4kk7PpzbfoYc2gYsLgcBHtKipg5HF5Ik2Ri\nLS7Wt95Vflhdm+a218GLaNAUfvGKVad4vWShO9irv4SfkDY3oup5RILd/kqt\nEasau5B8m2W6fdV3wzMLLQaxkE2YTyojOfQwyI7WYkhrfKs+67BzGuZhBEOv\n56ZpuqQFLdWLzEyTpU8foBPiqfoDFLYxF45N5MYWRW8/M02bYjgDoy1xXIH2\n9u3LWNkBuXKt9sO6QwLZ5GqJ2R27r5/tkHmvDV7KU+DNRgYJ04kzY9jyKveW\n9W8z7jUv0gaXMu3DYzSCByYcF4LbzOpIuc/7Vvh1R9HF9FULrsIi0rzr8zir\nEPRxlCQq7ro3J3fCuVvtrXA9NTA/eiRfebttiNgR45qVVQI1wUepUSsIW32d\nAmvCLBMqRBjovU6vURjn2/m0tEEV8i5icXt3GOjvBDxdItX/ayBnA4Q6rm4A\nBzVYX9pil1Jw1TqaIEtEsYcPAAQ/QXmyDbd49Vt/1Kj4CocdoAzrqlXVPsO2\nBnLOuPUOlJ6nVCteDVPldB6TPEpMmKJluj4bnF6ZJR/Q5Uw2a3i5vwf6vbOF\ngPTI\r\n=Nd9q\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"03f106996a669c620550c41e8895fd51ce075a02","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.16.3","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^7.0.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^7.0.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_7.0.0_1569607718570_0.48849755336793876","host":"s3://npm-registry-packages"}},"6.0.0-rnn2.17":{"name":"@brandingbrand/fsengage","version":"6.0.0-rnn2.17","license":"MIT","_id":"@brandingbrand/fsengage@6.0.0-rnn2.17","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winstonkim","email":"winzton.kim@gmail.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"39b9f5f2d1e5387ad9b34f86baa78d529811324c","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-6.0.0-rnn2.17.tgz","fileCount":162,"integrity":"sha512-LjOMKWIuCVoks+eUteuxgOjQJ+irUkV6Jp7jysM/u0aySf58nocIlfhEcAB0BgZdCJ3bm+ymI7xDTbopC/E93g==","signatures":[{"sig":"MEQCICvQTr1eeKvzZg+LdHZulkv/LqoYyKuSQb95ItIKFCCeAiAVUiPQilNxteroOwV1T6NZ2gGjC8OixEconBfyhMjNAg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":360964,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdk5oaCRA9TVsSAnZWagAA+wEP/iX8acRQ+KjFnF+JpklC\nB4vAQ9wdGozUVVyKrsexLeUNIgcVa5pB7wpQgkShUDmClLO1XRwsG8AoHgMQ\n8qysFtBuvHNSwGQZi5+LQF0UloyN3c9ViOGhbDiYnIntXh6HeecCSxiYmSV4\nv+bNrb0QVkJC1wz5sBE+fPxn0ZFAOF0JKxHWM6PKJX/lmcwzHREFGpH+eINy\nu/5kUOQ9l5lUIIAuPBg//N6IP/uHvWP7YljjOrbMFiy7NNZmY1x7tzsE9hTn\nxoW3Nz1wL5BzpN9MfWRMvuOpsx4ZJ0L4PYpUnBsrHwMcqL7vev7qg+/nuxUp\nqU5a4R+YlAB4MefIZY6y2Z2jmaDGtatQfa5zzjcz5YUOvPOoIPxHhqazkWLI\nILUL9zFTcbBK8m9VXWN8eh1Go5NXH4qTQRrCPoSsE7aKtWIRgn8CjUeKo64m\nMXK40LJnLsnSx5El2vMLfaWMeP/i9qo8kJXPPI8HWTHeGZtHPRqs5LIBowYD\naipD6UlLiPvw/31oltXPTa3RpvCZDUrbajFLHVry2Q04mtqHB8tj37Fysrap\nzH+Qon9YKBO166IgXdqIZFVIiszjJYWhyOeMLlgqVSmGCGm7/mjA0lXu4ebR\nKM0ZVfZAMuDqiFC/PGui7Ez8z6xdmjJFFBgb5AXAH2yzfr3rguqYARHm6Rur\n74lw\r\n=Hpg3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"d032c6baa2b11499143953088d10338a12a1d73d","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},"_npmVersion":"lerna/3.16.4/node@v10.10.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.10.0","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^6.0.0-rnn2.17+d032c6ba","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^6.0.0-rnn2.17+d032c6ba","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_6.0.0-rnn2.17_1569954329377_0.46372003678756246","host":"s3://npm-registry-packages"}},"7.1.0":{"name":"@brandingbrand/fsengage","version":"7.1.0","license":"MIT","_id":"@brandingbrand/fsengage@7.1.0","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winstonkim","email":"winzton.kim@gmail.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"ba6b9ab427d1fdc24449033892436be9842a3736","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-7.1.0.tgz","fileCount":162,"integrity":"sha512-yQUcs8E+lBXGNzVF1DiXHLSSLuZKDpGDnRSQJX2ucG52Y1lBs7QFo775VE0T40IV0aenqq21m+Mq/e/QgpvVKQ==","signatures":[{"sig":"MEUCIFga56JEbIKoz+3tC/UTchGmYEclSfKvq4Xr79bxHKGhAiEAz7yrdVXy7KXFGvnjd+KYmpqIiVOnBprGukdVC5xA1pE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":362517,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdlPSnCRA9TVsSAnZWagAALM4QAKCcxOXBcc6tkbzD+9jV\nSpdC70uzKh5LLAbyFJ7Lr+vLHsm3FLDgUqs6Pd3MG1Aeo7l0e167dRsvYSR6\nmKibprWJC5glxoaomwyw64/OzQoWX0ofZPAxE2mJ3rLJ2VN0oKuPw5Wq42F8\ndYS+INVfWoQ0yfuqSh2M2fvKMpF8bIleYy/pdMcEfIJ/D3ijSZOvS4BA1t7T\nWtcfleGqCpAU9X/pskM6yNXyYsg7pef4puVKF8Re7jWwE2ZO4cMVVv1NetsX\n10BBpxU51ogLJ1GXhT1TIiFcoNytzZPom/qCrWeMt6lhPAT9hPxogatjKKfR\nt3CaW2TSMY+JVCbYGIXIn1O+Fd390ohxqxWtZ3RWnd2YzemKggKw027Op5S7\nMrTFhGANuwggCpiYMLXaYAR1q3C4p3aLwciYdbYdkCjWWupJlRKwiqsOWDCD\npqZefMrP4/6gJu5JBiG4bpwuFysR4ZcPMqzt8QSCUab10xArza3aIVcJXYgJ\nFpcOH+Hp51zT8ORNK9e1G1envhCTVItbPN4gPgAEXLP65S+dZPBI1khmPvQL\nn7ka8KFaErZCbE0YYQ6iDdJu/pWj2i385HyjxvuaXbKvJdIXxiCn9f9cjhMc\nzL60CXBVsUvUaa4K9Ub07X3YDUrL/Lc+g7uI4QX9zeZQeFWIWlZANKkkqEkz\nX0Tf\r\n=uOgA\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"b5cbd20b195cfceb632c15938b7bbe25e8cd4dd7","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"cauldrath","email":"ben@brandingbrand.com"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.16.3","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^7.1.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^7.1.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_7.1.0_1570043047016_0.12888176819697228","host":"s3://npm-registry-packages"}},"8.0.0-rnn2.0":{"name":"@brandingbrand/fsengage","version":"8.0.0-rnn2.0","license":"MIT","_id":"@brandingbrand/fsengage@8.0.0-rnn2.0","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winstonkim","email":"winzton.kim@gmail.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"6cebf1a8f7700a1633661b8dfbbbffd2a930c64c","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-8.0.0-rnn2.0.tgz","fileCount":162,"integrity":"sha512-W8mi8wkoRjsjYW4nIE0cmu/xsOqlt6pUEvIpR+fsZ5PN3PZUYCbJR3M7p3xyhICRvLgevtARFnExgFcDzs5erw==","signatures":[{"sig":"MEUCIQDxIdR6AaQQFnZTJAXAU+j2YKUcsm0YayJT7gjtpuIDTAIgYiz2f5BZYx7Zfop1q2v119mM9Ym4NcWVOgmWXK/2kSo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":362739,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdlQwICRA9TVsSAnZWagAAcqoP/1GZIIL/yRUeNaEcnJls\nucFabU6RGRITowmP8RR0xQwddsaNgNJ3cfTTqS9vDD5DzhtYDhPRCxsYrOHL\nKJgmsN+gt1NueoRUcCiwVwH3BWBZpPredwSwiGfLFRY8+jVOtnk6St59NCyL\npHm11BY7jeLD4BjQnGCT6gsDiqHe0Hc74U9qNHM4ZAuzV/4ewCpUF8Vof4n/\nYXXSlSnGVtA9BdXM9PdBQ064ZeE7WNRCFeRpRO/BVEWqNtN5K5J6gzzK604L\nHDBhvFlcQrkjz9XflrsqHT+AqJPPkQy5adFQoE1f/5kpr66m6Gc0ISqbYbwi\nfL+K2NlQWW/MzzZz/q8Q/F17gpcXlzdHda2NPy7zXMJBjyiq5kNxpRwCbFF/\naZkVAn3TdWqe+1d+C4pVYChuTUf498n1RgS8QhOo9S17K0attuVe75xikbSV\nstAy7KozvbSrXAMv8GrHWHgOQnJzZfllC/C6RWsIpZ8oagYY95/ycKD3ay0n\nByqs4s9Dvbr1IiCEqD1czlN/Dp9JzLbEh5HB2VOEzWox3kiBIxIIA1NxaVgs\nyrjq/JLY2iwIQw8mT8vW3jUl/Er5yBX5ztqqh12O3SeFWCqL8wzNRwJRV+4w\nYxfgVI5bDDCt/Z6X86h4xNe4gMX/J64/7aO60rNrm5S3mm0KafRD74uUwLt9\n0Fxm\r\n=98xv\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"077f7934c32b236d2e3411c4e374ad5a59dad3de","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},"_npmVersion":"lerna/3.16.4/node@v10.10.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.10.0","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^8.0.0-rnn2.0+077f7934","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^8.0.0-rnn2.0+077f7934","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_8.0.0-rnn2.0_1570049031839_0.6449338909212057","host":"s3://npm-registry-packages"}},"8.0.1-rnn2.0":{"name":"@brandingbrand/fsengage","version":"8.0.1-rnn2.0","license":"MIT","_id":"@brandingbrand/fsengage@8.0.1-rnn2.0","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winstonkim","email":"winzton.kim@gmail.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"32705dcd1d43a6eeac4971b787b9c8e0dbd88c85","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-8.0.1-rnn2.0.tgz","fileCount":162,"integrity":"sha512-zh2zlLgSj6ACU1tIhnoc97Mqv8/KKSUKA+qhwlSh1HWhMI0IT2B6R5QZrybmpPULSMsaF6mdN2GOdqw3gU3wlA==","signatures":[{"sig":"MEUCIQCyX7A+7J+I/9tS/pr/koQsVJkFUyhCCHDp5VuLnp0QdgIgYdLaq+b641SNn/h3sesfe4Teqdp0JvRwQVh0DMk6ono=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":362914,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdlSIOCRA9TVsSAnZWagAATJEQAJY/DhHvYGhF7QjkNV4z\nHc1YXO/LVIw3idqMPMe0nBpDGmZxtUr6auv+VaFYu9IfTVsd+YCbpVVKXdr9\nszBdo94dF/72WET2apKEqvfgyley+t5u6cAQ8hpFK2jstCm/jJrjyUb126kq\n0wtNdxzRY0jVEpOmjZnIYZdoi25Oi15La61MHZy0KOla19urSl0YrxlXwx5s\n/LZe5/wdSnx0EIecs4exgN32fTz0+Avgcq4gSdqd594XujUf9fGNQ3fnWnTw\n6vyJwM9VfpzwMxzpwLZ382eMequkw5ASK/LAK3rqZ5CYyVCa+ishCn4aSrJh\ng2xRKlrKgcQy59HLGI5KmXhxFL52taufua3t1z7mLLLTCfK1pnV0x+2+Fwfm\nZC9Q8f0hxi/6fIbPD8P08FDq8pa0ebESH9e3r6Em1JDew5QuVsVFdvSHQipR\nVlJyOKHAR956gQ0fUyoHY6vfFaZ07zNL7JReN2vgS8JfB0fGlb8wgMsCJwf0\n2gdzK5blURcXSflHDtPME0IRj+wT0pRWcK4S2r/T+qikQtUJ7xnH+k/zh9uk\nNl2gPNC1IgohShS3RSar36UjfhnSYrF5GD1lvXB3Kydo2k77gWXvFAaoyvLF\nn+0svuHxa9gJ9VWP+lloc3yZutAkIibVKRPzACI1lbZstU9a/hvFQy9rUN53\nf/EM\r\n=LKge\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"b92dcffcc91e49aa04f21d647596c550260504de","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},"_npmVersion":"lerna/3.16.4/node@v10.10.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.10.0","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^8.0.1-rnn2.0+b92dcffc","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^8.0.1-rnn2.0+b92dcffc","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_8.0.1-rnn2.0_1570054669513_0.19951094802641056","host":"s3://npm-registry-packages"}},"8.0.2-rnn2.0":{"name":"@brandingbrand/fsengage","version":"8.0.2-rnn2.0","license":"MIT","_id":"@brandingbrand/fsengage@8.0.2-rnn2.0","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winstonkim","email":"winzton.kim@gmail.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"9c5987e0e7437e4fec02a1ed54378a0f82c4ec0a","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-8.0.2-rnn2.0.tgz","fileCount":162,"integrity":"sha512-Yb0lsBnaXE6wygTMMwAt/06gGPYY3kHBYlUbmWKK7bioiePBcNRowFA5EF57w05k1KvkfhmymSjseFz8peec2w==","signatures":[{"sig":"MEYCIQCXNx0c+D0sB2hBHWmwf2zdRA7RahSBXmdg9XdeiQurRwIhAJA0f5UcrHcpMHYytoO0+sO9yIZiRRg0w7JmQ12DdniY","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":363089,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdlkaOCRA9TVsSAnZWagAAVTIP/34lyLgkvwiJkkHoUBdK\nizoIj5XkPC4en+O5C+ChF/d88P0tGh4DIAUvlntLzMOwaTpG27RqQ7Lzgiuf\nFhsqJNHJGVHMLOq5x2/u6k116X10AX/EPSgdEaH2g9yErCjUMmFq0L3Ecy7F\n7cuOvjjTPYAvWQWFuaXgshpSBbBf22f/OqtXRz8R4bf09V8tG0yjGvlhb8Zj\n/uNgNatFC2q3PY4jK5Lh+vjMZRHevub33+DG5HOorj7pZ2CVSQEsfur4WIiM\nTPu0hkPSv6bhz8jlyThy8KFdG4CLkex/tBWg5GhW9pCObnZNLo55Cs3WzyNo\nTL+KZTp2ilJp7WP74Ru83Z3mPJ0GdvMmZMO+UNAM8LRryHhRsRK/vb9faLwU\nLMDjMdLoiwkyVA3vCIlmdxZfoY8NuhrdFtw+TagYGWGxvMX6VRmO2D6tyD1J\nyc7VwXYge6XFXHvGyimdBDsPt8Zw5fUgX9PRD7q4+I6JA+PV43UXKOhyzyKv\n/GccGW3g5+5VX7wrxKiInnprj0IDhjnAJJTSC0hl2f8QyL8AxG2K2b5rvZKP\ngL4gPS7lDzsK8Kgmcg1Ap4fzNrfeCl4InDlUU/o2QgHuDGr52NVMC06FZKPc\nwSEtbeLT+uxWr8j2UMLV2KnghFWSaCg6I7+q1yUwm3BNEZm/6DcnrGD1DTgw\nxp8O\r\n=aPwy\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"9a41c452e5bc22e0ae8aae6dc69183e2d37972e9","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},"_npmVersion":"lerna/3.16.4/node@v10.10.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.10.0","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^8.0.2-rnn2.0+9a41c452","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^8.0.2-rnn2.0+9a41c452","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_8.0.2-rnn2.0_1570129549795_0.7250616128691525","host":"s3://npm-registry-packages"}},"7.1.1":{"name":"@brandingbrand/fsengage","version":"7.1.1","license":"MIT","_id":"@brandingbrand/fsengage@7.1.1","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winstonkim","email":"winzton.kim@gmail.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"10a40b74e50a416221ddd2d4ddcfffdd3d9242f9","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-7.1.1.tgz","fileCount":162,"integrity":"sha512-PF79KCnFZsletHZjXV/1YBgLMDOVqnz/Pt+ZxnjTliDEHUXgR6gopGOGElgRQpkhHNkryeTzh7CjYKJNsdkYNg==","signatures":[{"sig":"MEYCIQCDivFFr6nmB/A6ugsEr3bdt3xQe1Sdwwz5ILU6rB2FSwIhAIy+Qb7wcGzKA1HExaAH1DacIyAPrHUKSTZKzxD3F7n+","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":362678,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdl3gVCRA9TVsSAnZWagAActkP/3KsvNs/nZQJwsPGauO6\nW2xbCR4CVv8xs0ahT9S6xFD/6r11yhUNr4iFQ2bZbwlVSDN08HWc6bEJDkIW\nRrFS6zYDsovY7uoJQiYvKlMgoNrREiozhQx5hVG/g3unDeVeZQbV5A3KgBdw\nSjeoEyP1Cne29v0r//e5zdcLryj+c0r/yiwAM/wdTmmRaACF+k0kG+ezVwBT\nEtxBeHujLYIqIWe55wmHaMwecZTUwUi/RN7x6cZWFNXc4AQNtcq/0KUACxOs\nE9p1M3M89ZJbugYw+9fXQZZkLtuF8HQAoKW0O+sHdCVkUxhqLA7Z3KucxSvz\nxdbLl3dQ6cbTmsDyx+lLa5Unp+2L8QZw9VopwS1aV1jVUCv4WkZf5EP1rSTv\nCL1SCBcmKSW47A1AvkpMNzpHG9Z/QBpnuJn2IVjQTTTgEiDxAvBmoObLGZlw\n+y66Ar0PutkqaNe18jPuQaxVkTSOyxV1xJvLphi1NVgadgWigBV2+sZLM07W\nbhO5iaCCr/S/P4qolcQ09GMqy8bxWdr8qwtsxx339PYGUL5zmIKlAq+Lkxho\nlB6PQY2Mi9XS8GLKnqthQTi+94ixBLgBmcg0OIbY0+2QemqGRRSEeexf6381\nbDtLffi6k8bXFAQaCIAKoEeZaW7GYXXZHd/ScoUUQXe/vpN5nyxDMjChGBTM\ns/4O\r\n=IksT\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"08329ca3381c97c4537748728bd0063863e87f77","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"cauldrath","email":"ben@brandingbrand.com"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.16.3","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^7.1.1","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^7.1.1","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_7.1.1_1570207764877_0.6001839552554391","host":"s3://npm-registry-packages"}},"7.2.0":{"name":"@brandingbrand/fsengage","version":"7.2.0","license":"MIT","_id":"@brandingbrand/fsengage@7.2.0","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winstonkim","email":"winzton.kim@gmail.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"e8ffa805780da9768beb33ff364dc3af2d84281e","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-7.2.0.tgz","fileCount":162,"integrity":"sha512-ireT/5PRJjb82P1VQ6yBHfK09gnrG+xpiBo867iHoLCSWXvQlPYEhbCRcIVcmCWv8eKw3LmJrvLAI7kjyG6ZNA==","signatures":[{"sig":"MEUCIQDUp63zgnvtZvQkmvb9zkppSUBnBr1xYtqBGEL8wRK+fwIgXeSoBK8B0wenYXZQGbEb0Llac5zovN5/7v2ksqppHic=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":362838,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdm553CRA9TVsSAnZWagAA2lQP/3anGyj367bxH5QyJOJN\n17fTor9YA/65yohApFKe0ql54GQ4PXMVW/G1FXWlg54mveaYeAhCRTL3YNLA\nyNM/D8DK0KgSqpWaE70OJTAWFDhfR0XDl9YREPu0qeQzfWSpQaCtwfEXWMqC\naDytI1kRYC5Z9OT+rd+4yh0/6pnM3erlZmzG5gqD8jqA/vGxHeyVNnj40/42\nqVoJS8+4chFRcGAkTPsyD2H9q+xEaxbccp1zvxLD7BU37BQfSdyp6nVo1Xoe\nlzx4umHohTVlQCVkgjo7DS11HPz0G8KAZJeVbeZisFHdm+ruc84uLeCx9W9J\nCmDORSgIDAgo3QyscaXftwDVDg8YnVnsUZTU/ZeI0jqKrMamtJZS5Ddl6A1K\nfExuhk4PN6VVWecELfFhQv6JD2k0mc5k9D91UZSx+1ZNUpVZIfd6thoyFux3\n9QM7OqzGQiA3kF2cFE5qmG/9KjXcYcIej2ZXAijr62VtKenyoits2r7KS/My\n7hebWy5jT8pxgzWrrt4kEZZnOMWnYqnLEO6W8pRAtn0Iw3+3pWBGhz1yuV0G\nXU/6s9eNUciyJFkqxJd6bQKDAOkfcIgKB42MMGVUJ/02Tvf0T3p+VZO3nhnl\no4uIL47Bk4ec9Om8QQvCTh0KcQbaBH04tjMIC/khUrnYKrgM84k5inGSCX3d\n1QCx\r\n=iFs7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"a2205c3e8402181f9c41446afaf84fcfb70f64ca","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"cauldrath","email":"ben@brandingbrand.com"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.16.3","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^7.2.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^7.2.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_7.2.0_1570479735113_0.863215943848592","host":"s3://npm-registry-packages"}},"7.3.0":{"name":"@brandingbrand/fsengage","version":"7.3.0","license":"MIT","_id":"@brandingbrand/fsengage@7.3.0","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winstonkim","email":"winzton.kim@gmail.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"9da6675e036d8515dc2245b050721e91afd9dc7c","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-7.3.0.tgz","fileCount":162,"integrity":"sha512-tHXQm38vJcyJfzy4y3sxyrFzgCkHTuEH6olpaECHdInFrki8vsUI9lhuQzrbYoZb/M4P+hNQxMWcGbG797UN3A==","signatures":[{"sig":"MEQCIA6fUMPwNv0RdgC6Usd7VXJ/VliAb7nKmVut9qs69YJsAiAoKDbVT96VwdqZ663g22Jyq4fWGlJP52mnTfPJ2vdmeg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":362998,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdnNSsCRA9TVsSAnZWagAAL5kP/RPLIkF3C2sigvXqEXVy\n/XreQGCWEYBjYLjLQxJfFn0nBLlfLDpqc/mQyyaGgPrKtSJ5VWm+rGeB37Xr\nvjVT2H4Wzfv6ACkHt1cTTlNREOqXmHG50fSCWHYB5uEXDTRxbcxdoMw8EyUL\n3lWzdlqZT3wEOoI/72qCHorFEmH/Wps2wegNIUWxMGieqOc/mrursQkCGC4f\nUXsqmwg45LSoLF4Kv7ncrdVa8Juin4WHb9ymSGzFuMCUsBh4FK0+5tY5XbwR\n76oVrInGYIhIMZqzcdH9G7iXPcWOC9uXhXkmcYN6RGWf14aVDPiPoESIU3BK\n281PY0a/2ZIJANfz7YcUickJMYHNjeB3nV0HX6i7RExy+D35Z1S7cRoKEvHw\nrB2Q4joN5ZHxG3FMyC3qg8CB+c+N4PJxnVAfPqvvIuydOBJE5UtbL8cGpwkd\nWeYpOrjRX129Am2pGr5Ex7b94KSkPibar8SaHk4RJJtMbmFCu6OIOwe4Tzh0\nHfDWbbfsm7T41auPP8as1yK7dnMSYfqT239gs3zeQmky4PYOnuGPmtb0sfcs\nfms1CtzC4vJinsy8aDuwOqY44VM9KSk6v/XPp1yqZKIRu4pYJwLWK/wZyccY\na31vKcgdoxMwEYWwxeK0nR8fv+GVtHz299Xii6gjMWXtkgvbFKI6ggArQdRf\n5DMA\r\n=eEMc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"65ea9b846795e31a9a663ba73cbc9e700c231f69","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.16.3","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^7.3.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^7.3.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_7.3.0_1570559147411_0.9459645022797927","host":"s3://npm-registry-packages"}},"7.4.0":{"name":"@brandingbrand/fsengage","version":"7.4.0","license":"MIT","_id":"@brandingbrand/fsengage@7.4.0","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winstonkim","email":"winzton.kim@gmail.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"b29bce0dcf62e31a7611c978e9b97a56f9b69e56","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-7.4.0.tgz","fileCount":162,"integrity":"sha512-4dKqt1z+hfcMdM8kE4rS64d8KJGCy9tM0KnbPqT+RHIeiS2GhW4Pw7I1loayP0lv5Wo0Q9+tdWgySpnt+tvibQ==","signatures":[{"sig":"MEUCIHICo5FASO6jrV8KTX9tbiIWX08DO4E0fMORTa8ohZ1FAiEArCKf+euJAqfxaW5gVpQp63SCrn2d8H1FMj6JI1lvH/c=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":363158,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdnQRFCRA9TVsSAnZWagAApNMQAKTPGVkmwLtoECN6HKx9\nceyHR/3wxlKzNj5ft5eqV6qbBG+bwJ4qcvDI0VpruFsfIOuaYw+Rwf9Vl97z\nxiJkDejf3B3zRKPjwmpVausdQ0mQFUFb1IipfXeS+tszVjzguZtq47veJTVt\n1ug+4vaMqhaYqNy7pen9HNHK+4MI2uuBySdgqYebbXUB9i64iPsR/0kzzCJ0\n3I/LXP24UNG/O7GcG9uwDHvjUpGxa4zPgo4gZfJY1uepy8k0CgJkL3ZuFQHD\nUfvqpT5qWcwA7icgCGjGAEuvdfH+d38gJ4fe7EsFYcvQRw2k1gVRT6HcmJ+M\n72sN34oSxr6wpmqgSuMzVmI/HBXPnOq1Q/OZC0pyZj9uPjhCXHuKuRnNq3x0\nq2RhfekrDi2Va6MPGvmAMpVYjOMWrhyAFCL8icSPgM3DU5xBFxuaC0szM5ys\nVjWXrrtVw5EQuSgiDIWt4m2Quw1FSksfACNcn8r8++vkcUjOOnEb7cXlj5cc\nbfB+cLcSvoe9PCRSeoIc0Rk0ZrROdwZFHQe2hzBnyE6hUHzKheH867M8DXJD\nxVDpXS0NdvNwJNRZ9mE2OkggykSx10HOI8CIg5B7Fv5JXE0i2DXaYmYwE+QC\n8BRTUQdhzslY9M4V4YVQ0SZ1+5OMcgwlo9EwppgecfuuWtOZcUE6Gmf8NXkD\n2CLw\r\n=+2gI\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"cf277e638dafcba3b739ceaaf22429560a284370","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.16.3","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^7.4.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^7.4.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_7.4.0_1570571332521_0.2890851101379357","host":"s3://npm-registry-packages"}},"7.4.1":{"name":"@brandingbrand/fsengage","version":"7.4.1","license":"MIT","_id":"@brandingbrand/fsengage@7.4.1","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winstonkim","email":"winzton.kim@gmail.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"08c3257121133b35b641d4f4b077117379a15307","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-7.4.1.tgz","fileCount":162,"integrity":"sha512-JBgjZ7gROTwXU11ogO74SIBpB2jXK4tEBeQDA5jpA2YgcgoemQ4ejFYvqgsYAOmP/10OPzSEaEZxL7hktcfu/w==","signatures":[{"sig":"MEUCIBvFc5C6zg1BfWi/1QcJzdgh7/ZRPtbPPYQRo3JFiaCzAiEAtERaB5q8huFdmFsni0K3KV2zSV6bE3BLTUF7kXHmm6o=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":363319,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdnjOLCRA9TVsSAnZWagAAx9oP/3oHt3Oy8ZDND/QcdkHg\nKyEzfkLrMI81L+Qc102S5Md7c3DEQTYtFWNHu4MynoSR70WcCahS0jhDQJWo\n8EnZs7hvLdvW0FYuo8UqU7EMciyRwy9CDlxgVqAQ+KL+HMX/yXIrfRThvQ/y\nWxlyzeoWUa3LLdaKun1k8gv4sqT8LkpLujpgvHGxSgdLrmoZuFkls3/UAn6g\nlWqDsrGMbME9jvM0WjoHcWGX72eniplO4JKxq/7uqH4Dib0zjTDgKzOzzt9W\nUJ4F9rCO3fPvqduLSIB9HnFEZst8E+sBzaQH/a1r0bkkP9lIca30uhbZW0aW\n898aLCzWDrumY3QmL0oNK/amuGlF4NaeEVYa1p/jTxm4tHXtY8TysM/aqYBo\n+ADOejVJG+sx6WXaqv1pT3SS1SeCllgfyewjk/3U2+2L4Xkk1ks0rq9insaE\nBA0gc8vevIn5UP8om4LG6LORI8VO+RKxaFXwDrUF5w/GSmw4WpDvJflER8As\nU9Xe9/y+I/CGZkrtKjfilRRGOhzz6sqAM7c98syVlWm3cH23+UWYAljbOAo0\nI2xlncRK1uEYFU6hpeRx2a4nS85uL8OPtJ8/SEbVR6Qx/ROZLstB/FX0JUPr\npVtQ2KioRCR0RyPhvd6Q1opKlW/Vg9+xsFUV8rkoQC+8WSd0GgLdbHqoSu6m\ng+9m\r\n=JpnY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"79ff4fb90c8ee71efa63163de3366c0228da6fb3","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"cauldrath","email":"ben@brandingbrand.com"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.16.3","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^7.4.1","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^7.4.1","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_7.4.1_1570648970341_0.9137517749212714","host":"s3://npm-registry-packages"}},"8.1.0-rnn2.0":{"name":"@brandingbrand/fsengage","version":"8.1.0-rnn2.0","license":"MIT","_id":"@brandingbrand/fsengage@8.1.0-rnn2.0","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winstonkim","email":"winzton.kim@gmail.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"8b5632ddfcb1793a0512a5dcda2ae11a23c4cd1c","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-8.1.0-rnn2.0.tgz","fileCount":162,"integrity":"sha512-1Xux09vV4x/x/b0vILppNX7qeSMmJS+AUnDTUNQZC6GlZffjI8NRjLaOR7iJ1CFeovZzf1lCOttLa8bDXa0C/g==","signatures":[{"sig":"MEUCIBT1YjASap/R7W6earR/HvvUN9kW1/WhUxOvVv0JpFJMAiEAxWCo+qdCjXYQUnqwZ92HnBTBl4ovVXhMQd6UlK37GII=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":363715,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdnlWtCRA9TVsSAnZWagAAtmAP/3OVmAjeGNTujynj/DsQ\nAuosNrSSI12WgLM6mY4Se3VKfO4e9X/AsdW9fxYzcdSzc6WKSh5ucglFU8kL\nc6OSBE6zq/qzaXLiA0gWtsAKYUh0dlVL46l7XcYmA3PZDf7EjQA3FVBYWuvc\n6xk5v3xU4o/MZiswTG5/+fxWUpULZ1Kq/XyG1WQyyoqP5naZFxN+VExwJ/AU\n311zI7NceA8KbTNyuOpoc9BvBzg9JDyDGtIDbwt2MhI7WPFG1L/lSuF1NInc\nmhU4Vp9Yw16AmjlQoK7bI7v+xsP439seOdFQMdzvVhVUqFbMc+LStxvX1/qd\nrPcgKOa/T7d9hmsAT5Q8+Bo9u8F1u1Zhm/pl8b/+iK19ZgAH2aUpZf1N4ZKp\nGNbt8WqAagglATZd74D+RnVj4EAmZEChnYR/Y+LY8bYgxai4cXjexA4lerrX\nFc3nhbT7F5U/Fp2szWp3eIuXm9objpNmdB6bJqT8mampQbSqPMmXIBKyRYiT\n/hunN2+7hi57T+dYFHSUK3RAn0acv5Ok+Setv+YmZ/R/sCQG0IizHT4EW3O/\nhslKemYt+NCmq6Ehb2r68rE9x4UdHcppMupElORA+y6rwIFOqsnkUos0Ydg0\nSigEhm55ebDhLvhXSTcdQRGDX5I9iKdUVeflMptW9JxGszG0+6Q7Fs+GDp7T\nRuI/\r\n=LCOe\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"8ceb84e1a08d468af2c3b45a1ebd09afe0657629","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},"_npmVersion":"lerna/3.16.4/node@v10.10.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.10.0","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^8.1.0-rnn2.0+8ceb84e1","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^8.1.0-rnn2.0+8ceb84e1","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_8.1.0-rnn2.0_1570657708671_0.916765186091923","host":"s3://npm-registry-packages"}},"8.1.1-rnn2.0":{"name":"@brandingbrand/fsengage","version":"8.1.1-rnn2.0","license":"MIT","_id":"@brandingbrand/fsengage@8.1.1-rnn2.0","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winstonkim","email":"winzton.kim@gmail.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"e9923a8443ae3aa3119966f784b02dc4b9b55a51","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-8.1.1-rnn2.0.tgz","fileCount":162,"integrity":"sha512-CAEOmkhXd10zMeD2ihJ9Io15xyfj3/uvp8t6n1ZMObjKPYUkED5+m+41rvEsvJXEeRIPv9pWAGFDMSJkrRoAQQ==","signatures":[{"sig":"MEQCIFnwi8MYRxQeV1mtTcBIbWjIFuBdEZ3lBzQXvEG9H1KmAiBT0FZGrLfRl51Xw54J6edNlkc0FbmnhctJHpw0ZEKcTg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":363515,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdoNioCRA9TVsSAnZWagAAk6EP/R9D8AiksPZV5hlglU8W\nR0jfsXsMpkbiiS5N8aizlB3uSR1H5DKJh3QppbRiHOY1pt2p7gPuBifTw0V9\nkb7FMPT4GQkvAyMHpu5rUOkcKAcpzsGzNZDYqgdcjrLMs+YPPE6/bc4HZGLr\n4ClVZVUlan+2fzmwZi6rg7TH1cK0E4Sea1nlFnQUQT1CK3feG7BcIY/EMLeI\nwMFg3aHci+G/uu3yu+PWLyacYzO6ZNisyD+dZ1dprJZfMCh3qIT+qksxhZme\ns5CuE8wPti1q3UP101LmfPLa74oPhi+TBxmNRDvkoaHrhWmWpayDt5SjUT5G\nN6f+63cvU23WOVV/5ahPlWKREzOuix6q5OOXlgY9rwH1W79IZSSbdgL5ivNi\n1RrfDuv9sDJRfQKVre6ERRE/YkVxlyfxu3ahyCHC0kXytmA6mAqv+Huj46Px\nmlc0ejKABJRtnbEmFj7e76rhLu7ReMB9vJzcUofOoFmSCvqSfFnRbZz3ox/1\nVaCI70fN2kWX+g/KxteQg0RCHfFmdmYNHR7pLnLD0e/NKHH64sZwMQOWzxpN\nAj6fhrBG8ufZCd3JThLnR2Elp5m7ba1hzmdWPw27qjGIZzWfQ+aaSjWQcm1W\naKKiQ3e0H6ulVyLYeqsRrIcKiPW6FCBsGPva6aauqU662sARRu7ACgDUUA3G\ntSia\r\n=IKcg\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"0419e1a2d012a5224321d3355e29eee5361882e7","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.16.3","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^8.1.1-rnn2.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^8.1.1-rnn2.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_8.1.1-rnn2.0_1570822311348_0.9505072962781709","host":"s3://npm-registry-packages"}},"8.1.3-rnn2.0":{"name":"@brandingbrand/fsengage","version":"8.1.3-rnn2.0","license":"MIT","_id":"@brandingbrand/fsengage@8.1.3-rnn2.0","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"josh.carvin","email":"josh.carvin@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winstonkim","email":"winzton.kim@gmail.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"f072b531f88617c6be028acdf1512a40d708bac2","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-8.1.3-rnn2.0.tgz","fileCount":162,"integrity":"sha512-yhYuhvvTFJAdy2eDNhA8l/bTQgxukNd4s1ySEq9/VEF7x0njeGARrcJesrSyd8cnv0IUcBCbHpqYq4e1l9hrQQ==","signatures":[{"sig":"MEYCIQDb5zLDt4V4KqaCurZ7vFnhzuRxjs/koOEhdFdE/T1QZAIhAPVgFAX5iygQM13Bk6ZM2YIl/YaFF6Sqyr4CwUnk8eDX","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":363879,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdoQZpCRA9TVsSAnZWagAAttMQAKKAuWs7S90qSRZTZ1Bh\nToKVUKujgKqkWr4R2W/9GpDM02euEq1PZMsepNNuFfH4T2br9kBzPJ+wWkz7\nSeJhR1vlcqExLrtHTHZB6Y9qSSdJgcGXCIJKZn7PhhRDP78+yV8jlLx3lZEJ\nO+wyM4INW29vgAZI2MsT5h5p3w832rJukHrUKJkojN0rP2wZIcyMrLIJh1VF\nGO0RBFmZ7fUge3VRVlM2gJs2ZH75Ye1CaveZj2bxKr8W/Ekw9F/1J9T50VB9\nzORNHzGKO+8DcHzbW8uU5bNBTmg8K2hV8N5veHZGUC6fx3V1TYt8YEjg+1nN\noE0nPxWS1E3caoWi2D/cCDnLhTIXFgJHxabGNOgwVj+tk/damCQLuWbJ2+U0\no3bIi/DP0tUhDwspD1XIRiYDcAkNUwgcJ/dWBwcDunFhchAmD6FPFNEyp0HV\naU2fAqqMpvHEFHobN1WnjuwmB3OnEKbCubFa5My8nMFVFIcnE63r1egW+ajY\n3GHDgsY0bFOtgRrNSr4GBl13XyUjPVR7tLBTEz+SSZj/3Sph3RDnP7Ze3tRp\nXOrkdW81/K2fXdq6x/rwa8DwYuN1OLVSFFhsDt64/7uvkZFZNO1bOEn73Ijb\n+LDuV0mj9kxX+YLsKfbAxYH6M5O1Zaw0Yyk2r7P3hY0c+AkHaLp8drK2Bn2h\n9YvL\r\n=udBm\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"b2b5ad83694397f290fcdb3d0a906f5e093727c7","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.16.3","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^8.1.3-rnn2.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^8.1.3-rnn2.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_8.1.3-rnn2.0_1570834024354_0.95031508802744","host":"s3://npm-registry-packages"}},"8.2.0-rnn2.0":{"name":"@brandingbrand/fsengage","version":"8.2.0-rnn2.0","license":"MIT","_id":"@brandingbrand/fsengage@8.2.0-rnn2.0","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lisa.vatavuk","email":"lisa.vatavuk@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winstonkim","email":"winzton.kim@gmail.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"9923b6d746b80ed86cf58f5d57f98094cfeeda63","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-8.2.0-rnn2.0.tgz","fileCount":162,"integrity":"sha512-1OGxtq4QswpYQ3C0Kw3Va0B8xWZgq42JEMkU4yJxufilx1dFsp04kNPFl9D9bjfLqMLzjblECdh2+pxFQ5jdKg==","signatures":[{"sig":"MEQCIGPhhN3vneZ5tFDZgSa7wtis7Q5g/tb//MUglhHFZ/iOAiAyGGvTV84gPKn5U148KPSACJsH5ZAStVimbJ3r21LFeg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":364060,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdqKC6CRA9TVsSAnZWagAAd2YP/0ZkuU268KXbMAXXR/CX\n6eksoFl8ABmxxT/ltCyVDKJTDbyTcr/eK7GsLR9XMDdd9Bao0YUvAvMTpk+v\nn7rWa8nBJym9n7n6JASmI+A1CjIAHY5Lak+O+QKfXOr2IHefeCzSHDh42KEz\n3IKzqf4bw2KhspK4rogbis/C1zl6H037M3XosxBDwCHsEFX9Lbu8drOaD6Ep\nsX3kFkOLwcP08c2mKqpne8GEyJ4DlGxb0orf6oLJ89/iF5IsdFEJeWq6ThtN\n3WHb/eNrooxfVWxMQk3RXgqQwaCQEOR5P9rKY5jVGa6ayDYY9P9dseWKPjST\nnQWmZUT2lKetUvklfjNKRNafewK3JL0UkvXBosunZl7JzD2OYadgLLmtw1++\nUP6YifFj+E7OmcVXBwYzVqPtmpUb9M00Wti+KigfORWmevp+iJKAx+ulFc0q\nm7BpRpZAklIpWl5acxa+dOGq5nw1C2IBLq7TOGXHL3jtaQqrtnrp4U13kfC/\nHJ1lYqtMN2QnKg4BSTiOfuCxPugJYDPu0lb0N6/qzgGHONASfeMDWoChfi2X\nEL4HlSFzyk2CYiSFu7g8Gk0Uo0u43t7CI2PZqORaIAgiN6bou7PsUKmPmLRW\nfhrgYaz1MAePr3Wm6yOmPzM7lKVIgbopvq/GMOOpR7nktn1YociPmopMkl54\njTVg\r\n=zehy\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"178c79c2ec70f5e55172088b21273fc781c283a6","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.16.3","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^8.2.0-rnn2.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^8.2.0-rnn2.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_8.2.0-rnn2.0_1571332281438_0.8503553454737378","host":"s3://npm-registry-packages"}},"7.4.2":{"name":"@brandingbrand/fsengage","version":"7.4.2","license":"MIT","_id":"@brandingbrand/fsengage@7.4.2","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winstonkim","email":"winzton.kim@gmail.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"9a6fec1594efe684bf7350de08d70cd2e3bf75a9","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-7.4.2.tgz","fileCount":162,"integrity":"sha512-yVTH6tSEIC4aYHmm/Zy7l4/dKzJqqS/5ks+Gt9QjsaIlD3LGEgZE+gcN24r2NPlF++ebemc1DMGmyQuFoAIyIg==","signatures":[{"sig":"MEQCIDp/x5RCraXgfhgMAgb6SLQcZZZ7GLMPxzNcCaRq89kOAiAoWHDF7Hg836GD6MmSDRL+gBS/1lZHlP5/jtc/NZ7tqA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":363480,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJduJlzCRA9TVsSAnZWagAAyS0P/RIZ1AiToF/+Z0JNeIUq\nZ24zIJQyiTafrdA1NuWerjb5vnUSyDBl1q9XmtKk/9z9Ql16lfwqixMDrdff\ng5LtR8RK9VqI2xuGl49Z0CNmVMo+rXgsVJkcHoEY42QJUB8/7St7v4EEHgAr\nPSk9Xp/jikRuqhQ2C6oJXOKBnKuIonAnW107LI+rAZaHUaGWYUy7EXdC4B9P\nb+KUTehGSaymA9Fb85HPvaFeb4gALGFAXWDJIuJxt19/n5Wis3E0EkiayIJ4\nR48dwvDBLyrmgbZ3Y7jlm9K8R9Lf/zvaGxMSjsJg/4ZDwBfjjAD2cspAywfE\n80c0d6/PCBESI8yHqmWyHFh4n+FDCEb7zB/pT1o+ZNoltN4EFcRx/Eh4ZgZS\n870f+g1XkB7E+Rx2wGgkXiDo3UOdk/KN/XNyI0HOF1ocTp59syT6sIoKq1+2\nNhh/EHAQ30GQqJsNebNpoM8RGwGBQVTgINU4P8cyvSGYq9dYSaOk9huuyb7Q\nkfRsaku9hqy9kiWmoEJ+F9G7lUltCyh4vGTAei4a8K6WqnfXrBGS86xG2SDf\ns0BAV9/y2mvIB4qQOh2dByVf+eGUYwKTh2AlGTHKgqTAuLC7llzi1uvj6nLK\n/H9sSQl8tE2inE3jrCj61biaOXVt/BI1T++qTpEXRzsEwWPjC/Q6QItUnjY+\n3d2+\r\n=8sDK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"dd63a4ef895736ca2b8036107f888d925dc5cc86","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.16.3","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^7.4.2","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^7.4.2","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_7.4.2_1572378995259_0.7215429984292963","host":"s3://npm-registry-packages"}},"7.4.3":{"name":"@brandingbrand/fsengage","version":"7.4.3","license":"MIT","_id":"@brandingbrand/fsengage@7.4.3","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winstonkim","email":"winzton.kim@gmail.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"3c771a9128adaa0ea5399a9f76ce9c3979b456ac","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-7.4.3.tgz","fileCount":162,"integrity":"sha512-kAUI5WfMF8Kt9/kDQbc2B2bIdOHN5Joadg/Y14ybHYvtqQE1TaFy0PUXluqPHgtFUUScR429B8R7dEJR44HTNg==","signatures":[{"sig":"MEUCIHiGIppxeGTtuQXoZ/h2BZkAnwginF8VWXRShg1eN5xTAiEAilYWGxmd47X/2DJ4C4+g+RpFShCpO2yhdLCj/A7D6CM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":363641,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdugBFCRA9TVsSAnZWagAAfkMP/1KGbAp8eOe0DDyse4Kg\n4bAhPVMyIGLmv4orcMGFWj9usilTr/3wbIjyza5reZTxFYnd+JMxziVH7rla\nzDFE9EHydL0nQ78HsaMuA0Q2zkCJda7jHz4wPqkZ88fMJj0MwXRJuKrGOiE5\nYpWdHGaRVRle6iuDsNY4HUTP7TaNf8CKIMPloYjaawdjpyD8iuQkABFNeLD7\nzSBLd+4b+RlWFp8twir96i8Frq/l8NJ/NKKcRpEp+49Sl1WsGWOkxSUUxBLa\nyflg2OuKDsyEJ/GnvUs9Ro5/NbOBfjYNqjpuGyjJx6OJk+AcSGCu5l7Y4ACv\n1u27XJE0Tq+8Udm7+JxbBK6DDCZgWxTQmQa+WVekqi73KnMRVXEwAaUcg004\nvU2O4MfeaIUzciRJ/BgdTm0ZtGktXvIuHU8QVFBcIeqeaUB0hh5E/qpiOwOd\nTdHULsKC3fnJ5+sUEdvUYJ6juL4xXgCvclYCcCkSjAooxGMMHdK9Pb5PbGF3\n6OQ1TxxUsqGpvuZppeiHmV1akNOHW30jVWk2xtyBnZqn+Lkn79z3sliIXFpp\n2l8LwIna2dWQLXowEX45dPU/RPd/8Y1vEkMyGI/IPO+yElD6fSDiTn2x4lB9\nWaIPXyq5WSVdTYEBxiXaq7SX5op9EMxx5ZeodkTQFCNlOY4zGQlH7lmG/7H8\nW/FM\r\n=E9YP\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"9ddaf4afa4939cae8d5ede13ba1157e560bd4013","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.16.3","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^7.4.3","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^7.4.3","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_7.4.3_1572470852703_0.12310475472512628","host":"s3://npm-registry-packages"}},"7.5.4":{"name":"@brandingbrand/fsengage","version":"7.5.4","license":"MIT","_id":"@brandingbrand/fsengage@7.5.4","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mauriciopf","email":"mauricio.perez@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winstonkim","email":"winzton.kim@gmail.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"bc59a0db0157e32956e04d5f2ac326e8725a4440","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-7.5.4.tgz","fileCount":162,"integrity":"sha512-c/n43JRjljMM2UFCPIps3dfHpc08CyjUVHRsSplQbEGqQ6pB3rUss2viqr48QdlZd0kYLFZALmU3KLzhYOtkGQ==","signatures":[{"sig":"MEUCIEF82OkRN249phlSWcOC7q33MsJgyTSn1pSzdnWZlvVAAiEAu8iZYXwNUq4ox6XFjy7095ifSF2Qn5U1Wie5FCecKZM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":364445,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdxYnyCRA9TVsSAnZWagAAo5MP/1NzqnUUCrD7th06WU7t\nG/nQiKbxQOAxDjyrJ4PwsXeppjn+Fy7wqoxeYmSyZSqqxXMlU1BFYaAQLQvF\n8dUjxHop3bQjZX/IgMMeXAe7QznsRDRQlay/7sKePZ38ZwtFWQMFE8CTSMT3\nhYlqJPBsGqzx1Opimk5yeKnNZ2ujn4GR3kwig56D2nmO2jH3nLa36AK8D17u\n78uVOTAxVIhBQRp68j38l2eHz/YcoANY6OmHVyDeBpqkTdf9wR+2WHTNf4xs\nqwvV+id18C+qHC3i0lGsn3lY6PHiBAMZS7ucXzW1DkKx/zTXzloIDwnmU05/\n0b7s5Ja7XXkI4W69V09smNOV0RvdzSnGaGr/t2qNn2iE3+Pp09t6gW7/F4Ky\nr3TuelsxyZeDnCbulI3vfZ/IGMwTfini2Uv/8ixqq2rao4mccjafGn6q7dyl\n/XjfuyKESE8GssxDR5vShf9m8Tj/8svu0Y2uhe4aWXoCdh/hah2+ZsSvnoS6\nPjQGyy57Rcx3vGMn+7Dt1IDJ6tn+48K2nZf2frvL4x/5eUbMfzRrg39BLS86\nQoMJeZv+uE/L5hfoRpIUJe1zJ7ZssGYrJpGWfXUaknR8qWF8DgWN7JV5RgAW\nGsTtsKrs7froEHATZ7Nw+vS2LPQXgcbSU+y7blu1mnltFCS5Mtwdp6yx4DbL\n29ww\r\n=lpnk\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"a0812aa366e8ab671d24bebe035f894c94390535","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.16.3","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^7.5.4","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^7.5.4","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_7.5.4_1573226994010_0.6818141763944525","host":"s3://npm-registry-packages"}},"7.6.0":{"name":"@brandingbrand/fsengage","version":"7.6.0","license":"MIT","_id":"@brandingbrand/fsengage@7.6.0","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jjb1027","email":"jjb1027@gmail.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winstonkim","email":"winzton.kim@gmail.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"6dc559d3d1653fde7e67927892bee5979730f325","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-7.6.0.tgz","fileCount":162,"integrity":"sha512-yw3vgdunRNVshIjcP02ofn2e6jpF8o2qfwfj346QbzwwCszpiKSOQLwzgoGLjWYavYbnLBoL6W9RG2BLaCqx4A==","signatures":[{"sig":"MEYCIQCRzK9PTQk1AGsFUNuG9HAeDSab/lWAzfWjyKCrsQp5RQIhAJOKOhjhZHv25rNkRKGASDknNEL32XEEqneN4jIS2nTI","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":364605,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdzdFICRA9TVsSAnZWagAA1QgP/Ru1ytD9YUnsqhAEwpRl\n/EJSj5dMDnVqSLtmioqkQnVUfc4FBmrsrNn4oAWtRXIpa9ScFz6n6U60+wcU\nCCsmcGIm0JlFzfkXCZPi5O5C259lJw5DFnjUcv7alWKBXDMrL2Ifcr7NW7F1\n9IfcAVWOAHR/UWFZxnRg3dCd9OeXZtmBcOXZoI/h5kcwr3F5+KRJfk5MbhGP\n6k/wJWk0FM0qt7PiTZvYDaV8ul4gN06HDUQSzvbrYrF43u/n7nRYg+0fAdie\nZTVrC0M548eFDsn4LYANgsVjIY7E/+f7VEIaAVpFlPwSaZGuR6jtJJ5XW7CF\nOA5HWbQGwy+wyg+otaWgh+EDyJam3U6VHK+iIF+8eu3gMdj4WJA7dXK3Fklf\nMWrWGTgOKTimYFG4TQWiEHqZ4DnX5EcjaiwesI7s8zW+c9keN1Hm4AyN3Pae\nxa1vzgAkNal/wnBiRtEllb7iL95FXyuALqd5mJlURxbH4S9TNk7qz7mvIvbO\nJ86mM1Vg78o+ey5Dn9rk3SobCN497vYGIxuH05Wby4W0bT5feZ2R7RY7EAsB\ntgdzPW1NN6AJxZ7keiMlEYqYfSnsO8a7XxS/74mEjyUC/459aD7mNZOm/a37\nbgdi9hGDVeYZCWmE/DX92HxjXU67xxFh9olO6pRu4INoq2MeAJIuUi/mW4d/\nXaNb\r\n=qVVR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"d0fee613f0b4d113c32eb5d7eb14582c3a6dfb7b","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.16.3","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^7.6.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^7.6.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_7.6.0_1573769543999_0.2263533014175081","host":"s3://npm-registry-packages"}},"7.7.0":{"name":"@brandingbrand/fsengage","version":"7.7.0","license":"MIT","_id":"@brandingbrand/fsengage@7.7.0","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jjb1027","email":"jjb1027@gmail.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winstonkim","email":"winzton.kim@gmail.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"2367e15624d6c5c994fb34546a985041069255ea","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-7.7.0.tgz","fileCount":162,"integrity":"sha512-9VHjkQr8X7IiZhFbwvvNAOrQTOhBk3rnwSoB+6BJjDDOa2V9+1iVIM2gKng+mVfbvjGaGQgJTO5lFQYLFk2vCw==","signatures":[{"sig":"MEUCIQD5kfnZy7dpiGEMs0Rr5klCsD30mYplZg1zXxPtvtFa8QIgAeTDWRBwoT8p1Ak299i4yjpK78w5J9lncuC/zA/LmnQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":364765,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd1Z/yCRA9TVsSAnZWagAAFKsP/0UykIqVMPVnaCzl032I\nQUxgJ6Q1Z8X08B1QHZ/KzvmJY97jCEhVqlsKKXYJAiCSZr6Vj1Oxua0+64Vj\nEGUiVItyzFqFhKr4a0MKnQjQV4BnCr1pGTVdnB+lfXo9VFCaq/DnQcMt8e55\nWa4C4NI16QtsdQbsf19XpHwkImT+UlVfCTcTNXtbCwfjPgrdgh664XCOoHRB\no6sVNClNV7+CuqdWnA2dAbp4c+4UjXT3LSJm18o0vaMBkIgJe4NiOtJlR8Vx\nirC06JnwtnNl9ddYoKxfeIRhwrN4csdS3QZDqooxsK9zZMAGGVLsVhIfCxUr\nPP+fSXxRGtCZC3wW9zIoFX3JNwPAnVkc/YCQzp/VnoLbs2hEjefpOuE17IPQ\nvlNVQoYjUcgBx+sVdMBhX9Bd7ZSzxJvX7QYUP6qpKysnm7HnEnnNeK3IkA/g\nYSzXOjpEXRo6rypjU98ayYvE5Nwc02Zdnu63iJSpKNFWXpxEhoWJS9bf53PN\nKSc28BH+XHrEw2xxyAU3lFyhvVnqjAxodHGI64uAucYR6ifSwe782W/DLk5Q\n9Uxe0vkYn+i+2cdHBQ7iTS/zKSZWIxLm2rqnPxVEFuaO46fZ++wVqacQkCEE\nLlS3EdxaOODLjDPBz4tOCfXV5bTbpfoLtN6/GIOVhhvMyJg4gZpjwuAbjTws\nkKOA\r\n=gF5a\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"7101b727ea7feb09e8440333bc6d1acce6192440","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.16.4/node@v10.16.3+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.16.3","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^7.7.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^7.7.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_7.7.0_1574281202360_0.43747537218545385","host":"s3://npm-registry-packages"}},"7.7.1":{"name":"@brandingbrand/fsengage","version":"7.7.1","license":"MIT","_id":"@brandingbrand/fsengage@7.7.1","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jjb1027","email":"jjb1027@gmail.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olgakutovaya","email":"o.kutovaya.ak@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winstonkim","email":"winzton.kim@gmail.com"},{"name":"xero","email":"x@xero.nu"}],"dist":{"shasum":"a4f81b98c0934fb1e7b5c23d231ae9d310957a27","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-7.7.1.tgz","fileCount":162,"integrity":"sha512-Sv+AGyPb6wX2UrIbIejLnTne1Hvd+gO9SEEiOr9g9Dey++XLhF0ZIr98/u7ne+RFuMTYWSbiMfY4XDgjAEAhuw==","signatures":[{"sig":"MEUCIBKJNv+3E29p+olvTvtiuzMOb685zxldRJ4lrSfeHeTtAiEAz2MIWxIZxcg1tKo8hi0BFmZLoHkpqrMT07oSDlqP/tU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":364926,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd1cW1CRA9TVsSAnZWagAAYdMP/jnlc83x3oNTlJqo/coL\nx1uKAU0iRLEGPjYvmx7dMFjiNi59WLniB0SjHoZM5NzKP08Z88yY2cvw1KqJ\nA5iIsitmUNe1UDEbwcHf1+FioxvtTEAYOWSB0JC85c/KFYPBtf58LWgU+wG1\nUPqZ3I1H8jzgzzaqT8tdX2ydkx25A0iNDj0AVS6vcq3iLV2iTNM2gWIT1MDe\ncNDw7DFTKyLdZA7nAvQQBp7D7rTBuxpc0ydVmUEQceigwMcmf6kSAzlmRI2Q\niHhs/keU3wDqm/8YuGPntd0LZU6UiI3gBwuuvye4kiUB1EsSzQbc4WS4vfnM\n+YwzMldhcNLakan9zMsGD161h7XizlR89CCIP1OXGiMe8wJSZKmRnnVreQ6p\neTyNDny05yK2atjhjiB/s6BRRWuXe3kRyKFfqwBWIgI+yaLBs45g2GhnGSdF\neEcG9Ma3YFx+QBHHzowmPlwPGNz1xJiBd/OuXuRznmiQZvCI40vXQ62Ed4wy\n31MPoPc+TdwMQ+N36mmXV6TFy4rS/qP5Fy5lvRxNWsCl+74fizGEc8oAP0PH\nrULTNvP+7RK7E/ayqSfDrXy82TYx5JAktCCtkt/hPt0dx/aeGQbPYAeH/Kpi\naAZY/Fwtv7MazGuj5hMPOvcR549rTkedeF8BM61klScpqBdo4cU41DnW3dE3\ntZpD\r\n=nPLn\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"7ab4d6d6bffd5fe3fbfed0866d269c2b8685c7af","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.18.5/node@v10.16.3+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.16.3","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^7.7.1","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^7.7.1","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_7.7.1_1574290868811_0.22556036166040627","host":"s3://npm-registry-packages"}},"8.4.0-rnn2.0":{"name":"@brandingbrand/fsengage","version":"8.4.0-rnn2.0","license":"MIT","_id":"@brandingbrand/fsengage@8.4.0-rnn2.0","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jjb1027","email":"jjb1027@gmail.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"}],"dist":{"shasum":"525643cf00636765429bcb7f68ccb18f31bb5891","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-8.4.0-rnn2.0.tgz","fileCount":162,"integrity":"sha512-Roneo4DkWeMeYqiio5qIG3tfg8gf0gRKXiQc4GUAOGZBK7bYBbJVnqvkX/Z2LLlEYOWl6lQSZ15Vsj0vTYFhXw==","signatures":[{"sig":"MEYCIQDRTHmr9RTljKQvq0QPGbqvzSz5SVxhWMw1s8KTTcNLhwIhAL1dJYnN9ovYmxCaaJ+mLIpTPOeHto0TzRCXVbhU+lht","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":366567,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd9Bn4CRA9TVsSAnZWagAAQ2AP/ROGZ9CJSe89sjV5wBTB\n2n++daR8ZQHc50jYHTGA/05xnYsvONNmlZ8MrKHinHJlbyAAG1d1A7p+CxNe\nl/yjM72jDprqpiaQqONXt7xlN7zCzwzJ12h+m0cCwK5vjt5ku6xhNSi9RM/3\n1jA+w+Lp0XYg2i2SOSCbAMSG/YnBsQX2VLN1IfuX8BEjmx5HBbNG5P0JPjgu\nVoSW+m0rifG2Fsyj8e7Qidt5FmSBVyWbM+aqDlaeufC5T124IZfmWTTCcDaG\n7+pfjusozVBsC4ILNIthIjPaMNf2mSVhCgWqESRFGX35JFwKfQkJUbQ94jue\nTvKyyKtCoGMYJoeXb96AfCHQkrDt8fCdI5aUa7o8Dyy8zC9DtNBBjX/9XwSq\nxwwLIC7QBdiMb/sCXcPEw94tmQGiCo6g5K+VX4NKbJM7+lDODP/5xgve1lFc\nsUK0661fwPquSCkRWrHy34LBmwFtKrZ9KPPQH71j8tbqDCIuOtJpSjbqxAYO\nlD9hDyyKafDpunLgfKtPdjfZh/gz4ZWnY383t3zr/wFrU2/nAM1vP6KfGST/\n+UA8vDv94HmwX6VltA8zm5WCz+f4fvoMysqN/s1m33wSHD9Te1jn3DycoOWd\nIuEZwbzy0gbNBVsNdGA9BA9vOtJCw0fsIaV8Y9QrWJQLHEZWSoTlT8dgVdQ8\nyQv3\r\n=cQBZ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"d48da67dae3f134ab2abc2381d72d252031ebd5a","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.19.0/node@v10.16.3+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.16.3","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^8.4.0-rnn2.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^8.4.0-rnn2.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_8.4.0-rnn2.0_1576278519517_0.49801909969072966","host":"s3://npm-registry-packages"}},"7.8.0":{"name":"@brandingbrand/fsengage","version":"7.8.0","license":"MIT","_id":"@brandingbrand/fsengage@7.8.0","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jjb1027","email":"jjb1027@gmail.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"}],"dist":{"shasum":"f9f6ffe036534aa6d5ad09cab46e1cd7662bd39d","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-7.8.0.tgz","fileCount":162,"integrity":"sha512-1SvIKYy0/B/MJmGJMgn4jRgsngFbt1wKnfzgYzyvekSyjJ5wsTOOGnqv/gBPTcrOhizEEV/ZweQ4Ska2IWhrrA==","signatures":[{"sig":"MEUCIFhsSXvJyK7Yr0XA4myLmatJlZmsWKbEbqbwDENZ/mTCAiEAn558L5+tR4IjqO/JD9pKK01RKp25DoXhynIEKROsgnM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":365086,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd+mZLCRA9TVsSAnZWagAAP0QP/ijTUfng/KcgfxMpjcFP\nQvP/+EgTTZ4Kd87rpvrNr65K0EFyd22e33H60fNLKgYWOW6/6fy3WSEubRV8\n93pSq5diR7ArhR7n+5u/PXkM5tPptqEuEDMJwtxupsT2UEq3OxfaJICjnUQh\n4aPCO/dygAK9T8HazOXEJbRDZ2ldSApb0bRacMHWSajmsANhXxYUAl7whctK\n3HeZSWSpa4Cge8XwD+blHVhPv7Kuzz3N+io4eLEP4b04wtOhFrb6M55NvXIX\n4KYqAyOHqiNjMBn/SJ5PqWxCm0c03kZpwW+PntjXzrX6hNpCqwbbPXMbPPO1\nQnIacFNr0UFRNysHFxg3xT0NQNzI0M97WFJNBoG0fidXQk2qXlm5X7ara+pK\ngZ79eUORPU2JJLa9eWnmqWiiMhv+P6DCY25wLEtf1h9vHln/aWxjG1ERU4I1\nCg2C+7plkXt1p97EBU5FC5vQy0wi+8XxxAJDVFq1foJFv+SAwxKwUIxerA4k\n8vTzi8YY2vMgBiX2R3Cb28Xkj+6PP6NCv33IgREiWX/oU1XnWwnFoUECY1PZ\nGGaoXm1X0Lxr8a116aldbgOl9fZaOeXStQsTjKfqsA5DKPiI17Inu0hCn/GZ\nCl1zWNkZOdcIECZ2afotR74YqH+z3/Z1faTKr1OzJaMgrOKa06JFVXc49X4a\naGdh\r\n=WZBR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"3d511647542eeea9e4339e644f380ffdba97e8be","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.19.0/node@v10.16.3+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.16.3","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^7.8.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^7.8.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_7.8.0_1576691275224_0.208058502075527","host":"s3://npm-registry-packages"}},"8.5.0-rnn2.0":{"name":"@brandingbrand/fsengage","version":"8.5.0-rnn2.0","license":"MIT","_id":"@brandingbrand/fsengage@8.5.0-rnn2.0","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jjb1027","email":"jjb1027@gmail.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"}],"dist":{"shasum":"437841d1bb2d290582e222f87c10e49bc9e429a3","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-8.5.0-rnn2.0.tgz","fileCount":162,"integrity":"sha512-oVR5x7O+EsqhQigjP+mc0PBwjK6AhgE1x+gyXI1TLIvryv1e5fACc9au5MUNxCCi7C5giI1bCXZE/HyzSm/AvQ==","signatures":[{"sig":"MEUCICgsBzHPvr5i9q9fauIT+AxbmBxIbrAQbTRHqP1STbQKAiEA0wpxG56ZFNcHwvpH7Tf/2UrslVd+4YtCpPdc5kdUyGo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":366748,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd+mojCRA9TVsSAnZWagAArn0P/1nmq5aSd0vgb3a/dEPC\nFL2Y5HQsCm7+bcwdkASvw0p7ns7mCopc4cpe9sJLdWYyA68v1HLSxEsxM3tj\n+BBu+jzFsuTEGoyevHnnbJwlIDAkwnUgG+yB9wzL3gVz8Tdt+giDtguX4TuC\n/Xp6fBM93e5APx7RYFeihKP8hWXhZUilN9fuL3nYzzUcGcUCty5YOzmzhDJX\n1s5Gcp3lTErkddTxXxCSz5R+mg85p6FE731lXSrR73is93LPPYfdimY0dxmg\nF57vshHOeLp7lYMa1mjwUtzo9DAL/PnZuMnvne7xjpmaCJLezBJR9Ky3uyjF\nsnqf2ZEX38xmGpi7YnuyEZ2nolGQWCXWrkGZhB7kvMZlqREhBogzsTYEwXty\noFzTLm0GB1LzzftGHbyftbA3/4nyl1rD14mahCW6szDpV2qMyA4sZLY45Kmo\ndQDj+oLpFMGJNXLJY5Aol8HCRyqao+UDvmK7LbaNekjHtUObzmODnCA6so3B\n6aoTzx15puPyJKm4uUCikLNh5JEpBFK9z9E5wCf5xphbR52xx3JYmCQKO62w\nlFL8rJVwWGqBXiRD+33JaRxE/XDoQcyoi4vTQmgNn5m5YF7H41owJ/NjMwVp\ngkHaXf/SkOoy+v2igvB9mEyrVZp61ziZ7wspbgjwgiShij9MZxeyQoHsJNPG\ngbBD\r\n=E/Ny\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"8bb20aed52977471f646faba7c3ebb05f0e88b08","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.19.0/node@v10.16.3+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.16.3","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^8.5.0-rnn2.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^8.5.0-rnn2.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_8.5.0-rnn2.0_1576692258701_0.5494376975296384","host":"s3://npm-registry-packages"}},"7.9.0":{"name":"@brandingbrand/fsengage","version":"7.9.0","license":"MIT","_id":"@brandingbrand/fsengage@7.9.0","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jjb1027","email":"jjb1027@gmail.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"}],"dist":{"shasum":"1d9a03588816ae751a685ef596e3225518c37ed1","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-7.9.0.tgz","fileCount":162,"integrity":"sha512-nZ4hLC+lsM9WimFzJxGYLx+gRagAMnzqa9Tiu/iIBbG4jlRMzI8FvkLH6FHt28OdYqPlfn/3sHA2smvOcG/3XA==","signatures":[{"sig":"MEYCIQDkDx/FNdx6Dw+6dGgOs0JsziqqhUkCo+Wo0oE4Hh2EcQIhALJrvt+gRcgQaLr/PqwXe9xkg0QGmZ4c9kykFBjUNnGr","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":365246,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeE31QCRA9TVsSAnZWagAAoM8P+QCn5EvNqkcJhAVFqlzQ\nhM7GSa5UqKWEte75SdZpmt40vM0+/PWcIHOLmNn5Qaw1S0IXZvi2hUc94+nh\nm7hnINmAosvaG/RlnwoEGDIxKgwjBHw4s3LOQcu20ExG+jNTgumNqb7mfvzD\nG8c9o85RBRtNP8VXgybZ6wUEtQGoEEou5ZUpo0oaIglgU7EfWb0ZLfPD6o9s\nPZOELZsKMWj/4r6HDqGdqivOHJCQhO6/Euh+jduC9Y7o+U28Ir4btbgZ+kd8\nXwqGgRD5ZtbLHV4NlrMiOQBUhYv3LT2qjiGRO8AP3elgTbRi8r9ujTgtAwY+\npFZJUHWzWuAwvfVVqSKA90S3yjsm8rOKDDrBuMHRhYB3YUtt+qE3e8amtOYh\nkjbEL6cwuzkEQnrzMessr77QjTCnBf9ADe5rggcNqWrYgDEAPRU5DB8OxCDE\n8HKt8DhMxBsJEqwfHVlfCrmE9Orpx7r89qBRIUr4LsDXDYLZsUsvf5ELV80a\ndOOZw6c8B9tw+OhF4lQiW0usyhdxpolejSM8e/WyYtGYUvJN587tNUGqrB4x\nYYa+WYDuZTggzyhe7pv3/f+bKvK7b4GoWbS5BdsLpD4lDkCiXzDR9t/LN9Kn\nE/S3L+3qszN+cYPLiEsraPwqVinjqW3Xui27tJ2Jvy4zrVMTs+QkwdVpEFHJ\nqDaA\r\n=itki\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"c164d8a406d645ddd1a6dcfd3d8e1869ccca4546","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.19.0/node@v10.18.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.18.0","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^7.9.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^7.9.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_7.9.0_1578335567529_0.7209800007273559","host":"s3://npm-registry-packages"}},"7.10.0":{"name":"@brandingbrand/fsengage","version":"7.10.0","license":"MIT","_id":"@brandingbrand/fsengage@7.10.0","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jjb1027","email":"jjb1027@gmail.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"}],"dist":{"shasum":"bbe6fbe081d63d572b532d2aa551a3fab91f92e7","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-7.10.0.tgz","fileCount":162,"integrity":"sha512-FT8LCHrqsKYsq0P/0eRSg4isNY//MwWeL1x0DaR9M+gO42YixfkQ+8hPrWybb41icWvtTfF+oeQLjM/VOl//Zw==","signatures":[{"sig":"MEQCIAJ9+bviEIalHnTmd0FO92ao2WsOFLdVIBcUwLjfm2EIAiAlqmM82vlbBTjN9HACzFaKOSN8MTTh8oH+D1kBtkFeHQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":365322,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeHeLHCRA9TVsSAnZWagAAfa8P/jngSZW9xDeQZdSAVDh7\njueNQoKf5XZrQtBPLQZi2UFHlEYsz0IlJ9sslQ0orQ6VA/9BQnBE3zEEr3c5\nVWUFzLsEN32XE6N+qrCplHvF36IfnuyvJjyA7pGVP0CougY9BhdmcSkXUxzq\nQkUveLwKo6gn4x17MUzjQJ912ytb6TdGtqRMByFxXDYU6rEtY0XcFoJ/28Mt\ntLSh5Gv0pGPHZlxKmIsB+X0KAf6R0BWDQCnQ4Js+1T37fNuhQuttbnOkaaue\nDQ34kxApSvLWwMu8qnet9+ge88Hso0zLfj/hK6MWaRcWtkNG9dMcHbRHRcHD\n+zAi/Hj9j9JAP7OfZOvQPHsPqYO0JdRCu2Y772U2c6uf4HZ7lDTmcN2tnjaO\nXAHXff8dotLNXtUGITPJZorj0Ub8jAh9rCr63Tf5HYcpWVL4gORi7sBKKBtF\n1P7yyYU3WXpN4kSwxOj1YuNb0HWm/67wg5MWGp+FT6An+hqguyLuWM4r3uvl\nuviwpIiUF0TiNkljORjZ+ucNOHWxT7oIfNBEnILs3/agtFzHfWwd1israG9P\ne0yN8ZTjBTaSm13yXT2DVRwuHU6hds29j/L984yVj9vYDf7H81SeKiP25rr4\nv00MlLkwl6nzpP6HZQ41hj+OEbcQ11dgUgCU1mIhDRdK2tIacAF1i7pa6s6H\np/3L\r\n=WdP9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"ad7ac531a30a43161691fd42ae2d5c785202ef16","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.19.0/node@v10.18.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.18.0","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^7.10.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^7.10.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_7.10.0_1579016902514_0.8418085922974565","host":"s3://npm-registry-packages"}},"8.0.0":{"name":"@brandingbrand/fsengage","version":"8.0.0","license":"MIT","_id":"@brandingbrand/fsengage@8.0.0","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jjb1027","email":"jjb1027@gmail.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"}],"dist":{"shasum":"13aabb065fd2109f95144a64bc2b4d24c65360f3","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-8.0.0.tgz","fileCount":162,"integrity":"sha512-yypI0mRKmNiV45fXFtuSB+7U78WO/d1h/ENqcar3xS5Fn+AW2VLQl70tL6HxwtdsSsR1mzsDgfkYe+7l580aiQ==","signatures":[{"sig":"MEUCIQCBOACQ+9mnlaCCBAf9lHxbj6lNcS4zUwnCKU60o5VUswIgZBbIfnCGtDQSR+VVYrL3kqnN4/1ksmXMAFRNRAA9DCE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":365480,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeH2vvCRA9TVsSAnZWagAAz74QAJAGS1554I2gGGdthCaI\n7srWGg+THLk9jW0AbzhVB6/LGk0Ao2pN/zLb+qhFMZIQp5XkUAjby5YmpeXF\npaHxUoi3VCfy8o//2BMmcvLB4G5fOnOBIVHDbhIFLJJZLyOhzv655rYjqg0E\nDvDZiriiT/k0jrvlAb9aQqf0kIEsJlMD6StxzmygLMKIU5e1iWkuhZUPeKS6\nxG+/cDWEiyPe5CrocOK6lVKTHp/tbBbwQFyZRT3ulwkGG9geYsLIuCLx2lrA\nzm1GI7zIWjOdCY6jY9catGLyEYu4U9L8VXHpNa4k969Xs/bX3jf4TkSJJva7\nxfDGH9m5jo4nB1c4Nj83w44AuFf7v3E/8EBjrexdQehEgYyMy6scKED2u9Mg\nzcGk9zmQRwLcQQPh73VAAvMcr9NNW84yHD4jT1ToodAUAGRgsK+40GmYVqFR\n419qb/PWiIabIkKx0lcj4b8V2VacFu2/hGu0bFVMsQ5DW6w7mO4MDbJu6tNQ\nSjWFOR2j8HEqRRMpsoEVFljzcwQ7ZmMDslJdE0/H1+u2wajFBDrYCpkD3rl+\ntvqCZ4TF5z3WJel12PK6DeA5ihYseU6ELJWBqmxLNLCU/IGZlPFEqypCZ3cE\nRaRQX+8KSmLTZXyySGT9GUERUyNhTFbQj5NE+n4P3drbNHdhRPQbjjBQdXO6\nqNML\r\n=d6DF\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"57874d376d2b50a89dddcec495b0fbe2ec4be595","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.19.0/node@v10.18.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.18.0","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^8.0.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^8.0.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_8.0.0_1579117550567_0.05295722330385266","host":"s3://npm-registry-packages"}},"8.1.0":{"name":"@brandingbrand/fsengage","version":"8.1.0","license":"MIT","_id":"@brandingbrand/fsengage@8.1.0","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jjb1027","email":"jjb1027@gmail.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"}],"dist":{"shasum":"d445f5cac7fb407af459c74bd4f2974e1bb8ea63","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-8.1.0.tgz","fileCount":162,"integrity":"sha512-m0QJNPQIrzNyo/5Ul4RQ6tfEBewLyVZR1f9x102Ux5cgWvk2DM+g6puF+bTLGCUJLXtRnAe9NmWeUk4gLHoHpg==","signatures":[{"sig":"MEUCIDnwOKcFnSbsspf7+maBLnkMedYp8gbmN3NZkJLc5DAfAiEAyYxJfjgPlckk1oXsjHV94o7EVJv7pGha+2yYSKlMQ1w=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":365640,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeK2wNCRA9TVsSAnZWagAARu8QAJdhrmnJBCQ6e6xIqdvy\niSOsTB6b12Kzp4+Qa1Yg61kQ18BxSm6lmBOr50nmX9wvUWZNxebL4Iw9H4dw\n6DwyaurLzbkBJqId8FA2JJwtKI7yvqPgOjflvTwaObPYzWtqdTLrb24tmVNg\nZiluHKukWkaZX4ednFEEoDtrJQ7iahhOa6NFd8ieSWitwu7u/66XUGPp5tL4\nxJjnvc0phAimPY+00qFw8Ue0AaNeUKGmz6HCB80YDPHjeuOdf/HcgSVsdXf2\nkGE2ZbyLT9Z4LL9a08Rr454/eSXoMNfEFeby9QuNi3nIjGQecqZfc6GE0iUp\nA5e7oujs6eVC64UNfU9JbOwbOfG96qTJLP9P2kTkSWIQF4ZRPdqvt9tic3kz\nTwHqgDDxBKV15vouOepnxxxDxzDWN6gGPbBz51rO8jjtRRrjFmlw57q2tsiy\ndsr/KeqqFRCEfza/6Kp1oaDC/nLWcIevxb2WM7RIUzKEcdp2KjLgjzdHk9V1\nBK0AGFuiB8rf6N+y+IYcCQsZFtsCdRXW2GgEhp75RRDxi1ZKi+kK3bLvDSbw\nJPap92rP4sYMtK0zA6CitnZEVFePNyBXQc727Hu9eXu8OmHIjN71Z/HX22ut\nrMcAGQJ5yxbEp3nK6CFe7RN7uMyCtRj/U9ZxQKXvN8t+GRTdpLlBKbflGGIC\nvbBg\r\n=tu//\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"b73d5b4214d818f7c7f4009af272350bc74a7897","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.19.0/node@v10.18.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.18.0","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^8.1.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^8.1.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_8.1.0_1579904012765_0.08724611952747385","host":"s3://npm-registry-packages"}},"8.2.0":{"name":"@brandingbrand/fsengage","version":"8.2.0","license":"MIT","_id":"@brandingbrand/fsengage@8.2.0","maintainers":[{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"}],"dist":{"shasum":"6d552b1af4c060d48175e2842782a28b4b01f3f8","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-8.2.0.tgz","fileCount":162,"integrity":"sha512-8H+dUhwb5GsIc7/4j3GCDm/zdDbB9ZHPmgD6PRIVGq76d4eDPqiwLbOc6oCI6IJfboZUdGph3zMfaELpFv7t/A==","signatures":[{"sig":"MEQCIFx9oXtDFh0Hr5rxpJ3CkahZzyXdLa9ZWo2JZ0U0miwGAiAOnNKuZmefssZoItBCxJ2beSTHJTDskYSE8LFeh22X/w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":365800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeQbNsCRA9TVsSAnZWagAA5w0QAIxnqt76wrS797treRpT\ni5JzlOoKkWATOlPUUXUj8ePZb77nW7/aCEVQy4y9T5bbiBiSHyOCMVoaEPp+\nz6ciJU1475D7PFJPISbKjgse5bU8FIK1F7tYI4YsQFncgTy9fTHr9W340+iz\nCThhzGzFYnkbIUdkMfRcy3aLW5Lu0WNRpfJuIGPMtCIU6mM3FMuibZ2soMCb\nHFFi87vNQabbHV+p7bl9nptXrp+AWlFoLFgpyyWT8SrK82OgDOxHGJ97BsUC\nAiJLXIx3Zpv7pM7JmRGwlQwBJWSDGBypF1GHrQrOcNjCuiz76GK/8g8xjh2k\nLu1f/EZq0l1wxZeWOzugJsNG1YrBytgUER683/3jRJ6TxKGiVqQlZBLxRLaP\n6Udw14eab/xM+fF01W1FFCXOf/dLx7ulekOqtzg0mexcdH16GpAPWs+J1I+s\nsq/mfVT2IVVocAlABBgjZIDf/G32nA82eMOh1+Gk1VoeVTp3/N9RWfThMrGG\n11Do351P+Nx8DdiYg8jkyVDQOP/pIX/2l3Jvlsw4/QliGK8nspa4+40l562r\nU2mXSgxYpIvRbtIPGxXZN856VwZoIosxk0QvGzLjsdVH0lWoTdkUY0b97ZvZ\npxm0sSzjztQIkUtw8X/h5ls6DWJX7f4Jg6zRWKxN6vEJjGAyRkYE1/kTNzEa\nJBLE\r\n=X1KG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"c62e60c55e75f15c6238c2a7a0f2bb9b7ab8b3b9","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.19.0/node@v10.18.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.18.0","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^8.2.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^8.2.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_8.2.0_1581364076256_0.4044705295930664","host":"s3://npm-registry-packages"}},"8.3.0":{"name":"@brandingbrand/fsengage","version":"8.3.0","license":"MIT","_id":"@brandingbrand/fsengage@8.3.0","maintainers":[{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"marcopchen","email":"marcopchen@gmail.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"}],"dist":{"shasum":"e564baa0374fa5d8fa0e0f127cd05d95cc4cf497","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-8.3.0.tgz","fileCount":162,"integrity":"sha512-VsEwQrb4aoMz6exJQbsp9QIxnrjSkLa9JpKfSaq+cvvsWhqyUlQjkZvjLQTXLD8nfZa3sAN6KrSKSZB/pmHswg==","signatures":[{"sig":"MEUCIDLz3Ku9vbrdAwscg6ksHZ+T3F6+6VqrIDZxYFogTxuNAiEAp4WN00PZYszz7LbPMfIxktTR7Lg1SC6jOU5PGnnvaw8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":365960,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeRFSACRA9TVsSAnZWagAAWJIP/imhZ7tRcc4YdOXJS44V\nLmf4ejuH1XsY1ZGLr8xQW4CMSdkADy2kSFWjzTfbfr7PB/7qafTxPtsft+aE\ngeGpqFtNQ0X1LKLioSUG6P4hO3zu/GLHQeKWm0XfCOYVukbLtKTHLjm0PYgO\nL3xUyAFRlfJJUpNRbE6umvruRdjpexpHAUpJ8brlDjC9MpRBbPa8bSjpkCK2\nChqe6RMoLz3J1mEqAujhE3E495yISLC75STCb5658Nbu4q6QKJRpgZlpPD/b\nP36s56m49QTj3JUeCGiwOsx6n7mn//PiQqHhUcpHQNvQI/Fsw9XdZFlgLIMp\npCHWqnkLeVNTqrmGkPrhqubfgwCJ9k2A3/F5Ap5ZHIEWbbeovVQ4jHvb6mAl\n5zxRWJnwql7EMXy6djICQG8k8/BIy+nr1khBGODpkO9zgqULxEF6MubDCbA2\n1ezfZcSAr82Xndy51Z3FvKgt9N0fx2sJAWFygxAlwviDBmdFsP9zYtioWVmp\nLrfKvgkXg94kNWEdQs6Y/wfb3hEy15IREILkWJwmgZreWAfxR1kWR6/q4e6y\nMJSkvqPi7BUo2ky49Ea86PMIBKJtvIJqN5ceDucELB0OfwcMjnczuuo4gIus\nJxUGw/QV2DxIa3j+kb502uC6iTtxU4GMYYksDYqysDJ+XO+HO7RdrGpXPV2j\nkY93\r\n=P2YL\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"d460e4d1d30758d5887854ecef2f2ac8c9d73141","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.19.0/node@v10.18.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.18.0","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^8.3.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^8.3.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_8.3.0_1581536383873_0.0027740644620750654","host":"s3://npm-registry-packages"}},"7.11.0":{"name":"@brandingbrand/fsengage","version":"7.11.0","license":"MIT","_id":"@brandingbrand/fsengage@7.11.0","maintainers":[{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"}],"dist":{"shasum":"c63b50725e0ffffe084e8fc80e71ccafac8f2923","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-7.11.0.tgz","fileCount":162,"integrity":"sha512-D3BXyl2PbPsOp2DpFflLQAW+xtT+LQ4w3pQ3k2Fn2F8SqxHyL3IHAo0XIt7eark8baKpwmy1keFhV5vMQ3yINQ==","signatures":[{"sig":"MEUCIQDXBF+hhDS9Z4P+JQQTQO0WOdok9AmIVGdeINPxuVFVvgIgUwoTACeWTXIKIr1plimsUALFPiAwX/vuun5VT8xd5QU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":365485,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeZn9ACRA9TVsSAnZWagAAGacP/2BEhRsHc8IMuXlUaINc\n6sX8ZpkSFzRWgkIzhAoUhAovz2p654c2M0dE0KIOttbtt5GHXXoqDNRaUchV\nOB9M7rVgavqN8sZOP/K9GEHFItDPwCYdUkS16PW31i6vcaa6+CacHMPP/Acg\nvuaMby8OiL8cwzgAx2i62wlvtyMwMcqF7+ExZm4s+aHvqwlRyQYdfl6yfimR\nWjgMWp/Pb7cWpFyszCdBzKXq5qbwczIq4M6/2nStm+ahi3ZU8W/nIA7CCOGl\nVxngw6RrlT4Ih3FrpHtWNrj6wZEt9MBvWj/3BM57t2nXZS931mWEuiPlM+Pw\n40RRkZtPXqvKdOqg1zj78qxzPUmXZXL9YzUTZLXI1nrUFyXoQGa1rE2/NvHA\n8Qw+gF7Ti9+aekC6X2CLszFa0Uka/iGjtApnZ5tCUDMHpPj2vwPLyPEy5zQJ\nOXbCCcT3Z6Q7o/NRKRbD9didqA6/CPh64Ka7EPGLh3ikajKL7vtuZgMLWXcZ\n8fMreIY43JOKgnC1wYNYBR5Nd6hhsGGva8jvMwKcADw85ihW5c2nmvww3OMY\nd7CH1mxFYFsMeqpRyEAIwv3yo8BMWzo4wqGxnJbRGO1rK6ELF+3GTPaUexNA\nY5/bBQNS9OaptlJTQyQRN+6HkJd+EvchLzZyER48h8vWaHeuseGWaAE9WN7I\nimsV\r\n=ERYc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"91c026730cb9f24626ba92d522e3065e2cf01915","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.19.0/node@v10.18.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.18.0","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^7.11.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^7.11.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_7.11.0_1583775552252_0.8375257370569955","host":"s3://npm-registry-packages"}},"8.4.0":{"name":"@brandingbrand/fsengage","version":"8.4.0","license":"MIT","_id":"@brandingbrand/fsengage@8.4.0","maintainers":[{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"}],"dist":{"shasum":"c43843f9415e870826a035879e75651e84af7bb5","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-8.4.0.tgz","fileCount":162,"integrity":"sha512-TUVOPNyXf0ezn3gDs4w6IfLRKQHhg+Zfv+a3FQu9Ov0hMRciKTjNV6oIxpwA318WcWWQs+x38pjKAc3vy4iDLg==","signatures":[{"sig":"MEYCIQCObAFhpvDQbGKT8TzoO6e42UJfH/s+zUuQBKOC1fX8UgIhANDPYxsjnsDDnsWeW3/X3k61xO9pHfpDlfnv6thrd0Ht","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":366120,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeZopGCRA9TVsSAnZWagAAXlkP/RCHP5MAuPGDiTyjPFzc\nT6H9foO5a9pw3F58dgwdBAZAk0PFp0UyzAwDmyIb7b0YnQupu+vEP8QiDeGR\n08LekKQ/Hu3qGSlEoU+FyFYRZe26teLsU6w91/sn+E5VdfbgZfk8ip3f39+R\nrlB6AHuDIvmQtrYMizjxSdhMM2t3/FBi7b++39A1J1cGxOmwoymI6zLGwHMs\nj711KjeH8dWGJFybD5ws2NlYj7TTFoKUHa/b5vj5hoDOttB7sureJfRQA1hP\nBDn+JbZgi6/qSvZpFu27iglhM/lS1uQD3QpS9h70x4RJqpjnZbOQpZpuZ2Wv\ntO6K7KoYOMsFzF5bq5YODNOXX4PJuKFVtq59HZjZLZ8S+/atnoI7OkAOoSLs\nPD4JM8S8w0x+eRYB9o83y14FY8KwRlCPQh+dQW7L19eGPmjMC9eQOcMWQERq\nvW6WTvXFNwM5hQDnVhYun9olIE7vNFp46J+m+UtFJstVL8ddVz1bJbMuyc8+\n5vt7vgiSCmCQOTJFCOfSYS9WtFzOtbFcX53rcQT4KnpzW/J5ojVf/uecR0kJ\niZ7qTVlsoYCWWxqmqBwPww898OvPOX1BQIkt3ac0iyv/KlHl1lbr9pfzrACx\n2SNR8kLPf/ba8kCwmuej7zvwu62LlF15SdTkxeSNsZxyqFoJe61xfuOf1Wqt\nD7aj\r\n=MfqM\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"4d84e7556080297c8b1e93e309d40b73c33ef9c7","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.19.0/node@v10.18.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.18.0","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^8.4.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^8.4.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_8.4.0_1583778374007_0.09200022729949597","host":"s3://npm-registry-packages"}},"9.1.0-rnn2.0":{"name":"@brandingbrand/fsengage","version":"9.1.0-rnn2.0","license":"MIT","_id":"@brandingbrand/fsengage@9.1.0-rnn2.0","maintainers":[{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"}],"dist":{"shasum":"4dbfe0a0569b926f64cbacc26b2171d7a658032d","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-9.1.0-rnn2.0.tgz","fileCount":162,"integrity":"sha512-Q2fOzZ9DR8PUHsaeROabUdSlTZrkaIqBKWyVmX70m61XXRZi76pMeIBK5CM3cQOHIbza5bu2duungFRnSSSWYA==","signatures":[{"sig":"MEUCIQCM6VBC1GZO+OegYQeAha34JQ/S1QnmW3nTa3rop9S0vQIgL/F19qB019uANJ0ovw7fCc7OggMZV9Qbq5zEZ+sJJqU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":367291,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeZ897CRA9TVsSAnZWagAA7qkP/AkozXICH2xZmlqP5dJn\nK3bH8HCVctvlcnWgJ81aN3jCC3Hb+ixKWSLSGBDO9ZEg7BuKK/4Jj6mCClQp\nFSkKia6U0RDlCGto93RRcjxO6rzh/wFn9ogQEH9g5iFXTUnGPVv4edyOtuhP\n5PN1XWxEv1mK7eha/0FBfc1wQSewwvOXTvMcHbg+qij1AbM8i4PKLwJP8seW\naGrJyHLn1Ms87cNnl7UCyz3Ul48JyGmgsiVweq6j6+rx8Tl5G9jUr1dC8NRo\n/WbPVQrXhKURh8A9KACJBMMgU9ZCAZV0sPkTkTv7CuBbDWwxJFhC5qqR0yfz\ndqRncLrEwzsgWU5slUmpQQHVHMuLhvgbJeiz8xX9sKKpG+F3k0G/xYzmZ9vc\nupXpY+JwLlEuMIgziWNIg0NrxRYq3yFVgj5JwSs/DCyKscQ178KV3nyrjqOB\nGgXBW73zKtAXNSfUjBbDX08gTm2AGB05JLytlFQOEXALI0baQu8zkbQE13dy\nx56YhYvSa6sAKirjqK66kLj76UHKDFclee22IAuzYBNQ6eus8PoHy/C/36DQ\nMDgXfp3lUHEU0AbBEvRFi6jp7vPXymwZ1E5gId37OM7Zh3m7iobrTCMNWur+\nYJyoQrIUCnwpLAMoU4NykIgXPdyvS01VzFQpsFixpOi6bjPdTRAJ4LTubIht\nmS3W\r\n=u1AO\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"77ea3f2ebe19a27180302e1e2ac3100bf1383408","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.19.0/node@v10.18.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.18.0","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^9.1.0-rnn2.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^9.1.0-rnn2.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_9.1.0-rnn2.0_1583861626563_0.8488196200253191","host":"s3://npm-registry-packages"}},"8.5.0":{"name":"@brandingbrand/fsengage","version":"8.5.0","license":"MIT","_id":"@brandingbrand/fsengage@8.5.0","maintainers":[{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"}],"dist":{"shasum":"0278e119302c5ccd91b2539ea5b75a4c55e324f5","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-8.5.0.tgz","fileCount":162,"integrity":"sha512-NsTC+aJ1efp6L/wvwPI0kS/I5kjq3mUEPQlan4bJsdSWtseaKEqY8g2zQhv8gPKOtCwbZBIxXgbo2GhyblnMmw==","signatures":[{"sig":"MEUCIDI2znFgmt8fa/jGk1tnfG0pFzCYzJ1goHMkfQSnpo8kAiEA/iAKctSvHuBCwS5+ZAW2guUEVDv5Cv6Z0FDpUgtB73o=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":366280,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJec5tACRA9TVsSAnZWagAAPrQP+QBr2q1iJHqoYmmkkJTQ\n5sitk6+bWFI950ajXM754hkcDR3iVMkm3rr3CIb870VCPSLv6f0A78C6Ga/N\npvSv7Vn4zh6AAwntYNS9pdhmsigCF+NupJ9HX2IPgfbkJ5RV69h0CLRl0TZ4\nUUWYNsvdo3LrzFKrd5TOeAxh8RrRT6x3y1CqqxFkLAgH7f06aJWB7gJ5kVeG\nKYiRRssBzG9LGz2M0f+CQwyMrgx6IXx9e/mkBrHGmDJeqCLIsOMOrGYRlEGW\nsQA2t+kBAhFIPIcHvBL6zBW8w4OPFGhR+WTjOLzxS2DDXSzjbCDTn9u7t9V9\ng0nZkGdMnfUa8fh9U6XupUGbC2sqlDTC6lOHxnxA9rrjn6a6GcvI1HHHz99P\nTmthG79xZvdry8GosVfWyxmb9QtmBEe+ORXchUPQ3cPi9ng+d8cj1YSi+D/O\noURpAJrP45TpNC9NHnuGynbWaDuPDYTEl+dYcrdw33+zuIJFZqERHpS8XblE\n4apcpftcm+jsz25BAHRvj3qF/LaVaotYBpzI5r7GPQNqsWcBDKexIOS0rViZ\nvNYAsOdNGiMzBbfhigVKMW6npQJCklRtgFgMUU2ibJisCHswMHxFJl46QCXD\nMKAIMpHCMBvJrjPA21j3Ucoq0uo9BAm8m10zD/tsUQkLZt+D4OjmklcamhdL\ntmmT\r\n=E9Bh\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"1b2888a7b7d64f2958b1ad6460ba4418e0f902a6","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.19.0/node@v10.18.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.18.0","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^8.5.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^8.5.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_8.5.0_1584634687810_0.5042688817141432","host":"s3://npm-registry-packages"}},"9.2.0-rnn2.0":{"name":"@brandingbrand/fsengage","version":"9.2.0-rnn2.0","license":"MIT","_id":"@brandingbrand/fsengage@9.2.0-rnn2.0","maintainers":[{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"}],"dist":{"shasum":"b2af5e026b59a4a2155f5282fe2616fd749ea234","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-9.2.0-rnn2.0.tgz","fileCount":162,"integrity":"sha512-qV8gs5fswIZF88PIeeP9gqIoxKVxcnQU+XWESD+L8HaLHhHJOvVy9WipCxQKrGe6m0UYNGrB1Nhp5B70H3bt/w==","signatures":[{"sig":"MEUCIQDTJP0MVyp1Fn2G2yNZeSfJ5et+bIekiUXZp4FCD95CFwIgVRFyY626gJZY8dyv64v4/BjDg6z4xgFUMpMbLMaWO+c=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":367472,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJedQd+CRA9TVsSAnZWagAAVJwP/3ugMzn/Fr3rGjW2Z9wa\nBKp8/jREWEF2shS1r/0dX1ylArxhOGyLHladeUhRZdXcJ9/L65cDfB5jlwdX\nN+0QhPVq1E17ChmD+LPvGhfU4KUvICaHAaHzYXOCaom517SeQ6eY9PWV6Bb4\nKRxIdG5bi5+WylTd1jppmVjH+Vio+LPUoAUcnDcqEJ3dbqVBAVQK6u0cqggb\nMaoZKvuElCw/CO9POI4Donx4sHR1gO3DpLZdklZ1+vW6GulpnXr8wXjhkNg0\n026rQ894FLnSks0KJkXyBezIME9Iz8WXapQbpJ9RijvHEcomwtp2P/TWeEfw\nBT5ZJOQ6sWBczW8PKx0O0UL+8jtl9Enu9b2CO7HAnDZO0oGp+vxEUtpy7Rsj\nl9mo6SFLNU08C08PR3ZBgCYvubIOT7D21j/3sTLeJNtEkAqEHcZbJ/7vE5Gr\ncYFDSx1/hvkKTYEGV/46Sk27lx7WD7PnJ2Y00IEIttXRYkNtO13BpZmjeaIt\n9aJCNcXt29B0ld3MQ8Lth2PR2//2izV7xF5KsdbbHbcbySFVGLP5g9GXVPbV\nBv0vXS1q2J6oAWM2dbVFD75wQtLTAcbpfHGsF3SVc4NfrF617jP75DywzBui\n+OWADl/QPjQzfa5uYYrH7f8TZ0IJYrMkkN9OvODiI/O49rVVGsvcu/sfc0z/\ns4x8\r\n=xF9P\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"a0c9eb6a43084a18e023aafb2c049cfe25afefcc","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.19.0/node@v10.18.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.18.0","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^9.2.0-rnn2.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^9.2.0-rnn2.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_9.2.0-rnn2.0_1584727933916_0.4760689485789664","host":"s3://npm-registry-packages"}},"8.6.0":{"name":"@brandingbrand/fsengage","version":"8.6.0","license":"MIT","_id":"@brandingbrand/fsengage@8.6.0","maintainers":[{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"}],"dist":{"shasum":"1accdffec0a4c8943dd9bec37980e0417b08b348","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-8.6.0.tgz","fileCount":162,"integrity":"sha512-zjLPBFfCr1Ujv5VTu8qDZnQlxryTCVjsKePrmdef3AaDyLHOmLcBMqdI3H5TN++hk04BTtNHbR+pjmK6A2VCxA==","signatures":[{"sig":"MEQCIHhzp5rPRdkkkA7wMLvzvyHgNRiGBasKg/BkPZX70DOtAiB6bZjMXgZDtyCIBFsd2IyIaUK+0YF3dVgqrlB549bjYA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":366440,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeeRgVCRA9TVsSAnZWagAAySsQAIMS05VHyIm/5EjmuLiz\nJfGUa9DucgL0sZpMSciHwK8rr+QdSV5DoLkPXL/p5eO2/+XI+GlG1nWCk88p\n8+h6RBkCPA40itTwDEGIeiiI2AXEn2TDQrOLpJO4/RMoyCaNdb2jsMrgd7FZ\nCLsGIgjqGAEvZPqKLbHONjktau1by5AG4hdKH21yhS82qS6giziQrPYAe/+a\n0b147ImC5L48MEkE7byD7b8i1noycM7voTnRz6K1sE7/K7+QSz6PpLqmhDoN\nBxvc/y1kUdJq2MvkhkezCE13KD0hctQ2yrxsA7uu2yf5PWBq73je5vPldg9a\nhNpxLwbKQyfWg71R5kxy1Vpj95LLf9CO6XP6JhsXu6PRRKnzUUnHt4pio/Et\nTQ13dBDkrv4bl136dXX/BhvcwTPPzKCzFjuHFsLD7yLfKA405reAVtu6N6MA\nLgsDHEcQ/5u9ncEjmMFTQ7Dfg3cMHV+s4icR/KjlRpbMT2IBzLUR3xSMEyfu\nxBoAZTDPxEtaVTidjLjNzdnXHtp1ooJK0S1Rzyp8l1jEnKEROVd8z6jknEfz\nqrePUezOFsciAyMed485vBXIyKXkbMOfXyoxxAC3yP2OjGHAVog6Zik+GU0B\nvKQFiiOrqDfcnboi05XqGRETrmTJHzR1w64kNRceJAAtV8KvFAGkAV3EcQrc\nSobI\r\n=JGov\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"d7778c8c6fb72aa100c74dfd0af456cdba2c4205","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.19.0/node@v10.18.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.18.0","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^8.6.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^8.6.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_8.6.0_1584994324450_0.33276741913785757","host":"s3://npm-registry-packages"}},"8.6.1":{"name":"@brandingbrand/fsengage","version":"8.6.1","license":"MIT","_id":"@brandingbrand/fsengage@8.6.1","maintainers":[{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"}],"dist":{"shasum":"954debba8d2e4d2e54de66b9ac33334c67df942f","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-8.6.1.tgz","fileCount":162,"integrity":"sha512-C+R1IEyLbYZTl6zG2uQHJsMToi41x7cuJMCFZc3nV3uXSOayYWfJUaB5a816+FK/aISE7G/pD2lV98WTcRr3Rg==","signatures":[{"sig":"MEYCIQDnz+IxhU9XplLjCRS3GqTLX4FvjyFqYiGBgvMC/dsYZwIhAO2U1vuvdfmTkPX5QRZp6loeWsEaPOdgE3HDBwr42zmQ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":366601,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeeTYZCRA9TVsSAnZWagAAqEkP/RNHzL7+wXXlaXEweQ6U\nF0V6fNjHYfEUmAIQBpalVZGQ3pM1Zo8KnO2Ky9UZPUN2/JiK7P/4u4vSVA+9\n3wH0EUNnrmWFPX0ncW3fW/jc/Xm9gOCWEy6eIJOLM/+OLP6HielsCnoQIz0/\nj2vAQ7Z6AFF8prQUR/NnXv8FLvlZ+9eAzsK8Sy8bFgBJ0WJxi81PPKQqium6\n2n8emuBk1pEq6YzriP4SbiuS8edkgbabBw48heisN3cKtJjuUs904nOcpC7y\nYTwghSF7KZIELj6kxoLYn9797N54i1Xh6PB9rFhGQeXa44EiX7D01nPc411d\nJh6tJ0+XdL7Z2ftrRTy50jqsJtO8SnWkh2tOyoaqQsKuu8OzVjttW6QoDSiw\nXxR2045DZGSC/KuQApdeU4NPMNz3qczK90NK7xG6i6EDJVw66A1hT8G6UIEZ\nh79cil36H2enb61hlo4MnpQbpSxe0xYHtiPoB529Lim+p3/2eLNm1NeCx7qw\ntZTvG/a5En+HGj2AjWZLxypzqODq+nzcW4768uRdR5py9AzHjBHSp4zTEhge\nSxpKC5qCTqZfeDBoHB0Jo9cuN/34Qffu+2HYgWK67qEUYf8l1hZS6muROo5M\ncznk1xzeTYrrhSGlm2lRcsuv7Pf0iUIIEGCJxiI4FpTlQZWjTnsoncE2A9q4\nww2f\r\n=asoU\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"4b48f8d16d2c46847337ea8bc27267f86cf26fd5","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.19.0/node@v10.18.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.18.0","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^8.6.1","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^8.6.1","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_8.6.1_1585002009274_0.5332245321544133","host":"s3://npm-registry-packages"}},"9.3.0-rnn2.0":{"name":"@brandingbrand/fsengage","version":"9.3.0-rnn2.0","license":"MIT","_id":"@brandingbrand/fsengage@9.3.0-rnn2.0","maintainers":[{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"}],"dist":{"shasum":"50e35279dcd0945e19ca2d429fd107d48e122afb","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-9.3.0-rnn2.0.tgz","fileCount":162,"integrity":"sha512-M7/WVm68l/9Njj5Pua74yeh4db8GGrOJ08yFWl2scCmM8zYobcex1TKKSaBeW9Alvd8bZ32jSzvcAU3E4LT2ug==","signatures":[{"sig":"MEQCIC0RMqwfVhcphfSBOWPC3W9Rp/JX85pAX29TZ47+OHEJAiA2a3NuW3Bz5uEVJe+oL2nw7OxcDDW2olnFnheL/1hm5A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":367653,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeei4zCRA9TVsSAnZWagAAubkP/0wvuNf4FvsS0uFf1hi6\nvpnQBPNZTwtah3Q92L0GCbOG2IRMYLPhcLJMiwM9fxbMD4gf/FINFxRgBOxc\nep/Jof6EwtDzeBQkpYTEoSQ4Myy86Xh7cjPGekCrGNMpdSzI+XEiuDo6fxHI\nRW3Y8jJDzvzRcsJGu22UwTC/MKUoI3pfwciBfhdhJAg65kXhfk97Pe+xGLZg\niYzKjwqBS7n+yTbxuGYbaeFQkZx3HZm0rs+LlkU0YJRhBzOpHDC9yl2uxkV4\n3NHugfYaNwU3tDSIhh0vKyMq/19dgsAiOJZSExzvsjQ5gnEtlWqOdJEzsj1N\n23iU9MSOcdCYCUis5pWSPZwP2j1wjuUy9WprT0XjDPZV23YM/OfR7CC0Dthb\nlBHCdW3p1FIxOaLh4DeIyaZXFfll8QRYfw0nCu60TmZT12rB/jSH4Dd8Ml1p\nib5biwX0gr3dSvSKLaS71wOpWsDqWJEypxjkrzMCdB1BP8DX1FP2YmkowqOQ\nudFTEebbgNAhmt6nc7Z+i4lxhXV6DiHYjIRjpn62kH1PMd/MRB3MM5NyV64Z\nbmpsiJQCfS7lrmn1Mj5UAY1eKxhDRzV8uEQrAgrPzXLybWIguJLNLybvQE93\nwXj/LFApiD3HaN9qTGw2qPjRjKbO71CMojWHZGwFh1Oj8zrX2Lf7r4Y+cZW1\n3EL0\r\n=2Oig\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"beda4a945be85abc06d9f90089cc7c8acbe22b08","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.19.0/node@v10.18.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.18.0","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^9.3.0-rnn2.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^9.3.0-rnn2.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_9.3.0-rnn2.0_1585065523029_0.6345229876828817","host":"s3://npm-registry-packages"}},"9.4.0-rnn2.0":{"name":"@brandingbrand/fsengage","version":"9.4.0-rnn2.0","license":"MIT","_id":"@brandingbrand/fsengage@9.4.0-rnn2.0","maintainers":[{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"}],"dist":{"shasum":"ee9958ea3012337ed09920490cd4c50b2feb84f3","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-9.4.0-rnn2.0.tgz","fileCount":162,"integrity":"sha512-o5BHNuFH39nu2rMjccoF/dXHr7rBGmYWpah41N+KTzPKzN/THyfvP215M2He6fNaUN9fk/QNa47gup1NOZcCVA==","signatures":[{"sig":"MEUCIHOjC6UUCeKrH9t5ulwOXvcl61Om4c+7JDtdpuy7j5qTAiEA8ushfDKsCqIUjZZtenRc7r1EBx7z9ip6wlYvxwYPxZM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":367834,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeenF3CRA9TVsSAnZWagAAvFsQAJIqQ5X10uBgamOHbzl6\n6WeTxURfRdesbQysZril6GYPi3iyqGtKQTaV+sGmVJtgFkA3JryEU72oBlz1\nqvUvF58eFDAsWY1M6n7BtZPKMMxPMPRFGTGX6IKcHGFysdcq5uIM4QoZVqy0\ne5bH9FV32hv8PRzX1DZA0dY84D1ctGNz5r6US/OdyfLlO6VhwJkszIXtQwg7\nBtOH3/KkX3DFJDRuURrtekdwvIwSiFH1wjqjO4ZPSjvoJ9HqoMlOjGmaq4sT\nHBfmASC8gQ8LCqOqmJLfobOZ+vUeLJlQsyOXwyYJyqxBnRKBHzua/wY5/L0H\nqO26tRmNBZhwsz0CZb5nHmsz34R8ym1epBoLkF5WqSFU8M1IyZ2QS85hf5cZ\nvx1SSu4+THhpFMKJPOfmr1NM3R30Hn1zJm0ItFAcXX16KER2SgkBXAr9WDWI\nUGg1Rogdf5KyY3xkxgeOpvkyP2SDNu0V+jDiaOVIRPTONFj9zkrlS0axp5sH\nuB2AdCtnObMNkmnZzKkFZhiqgxoM3GkX0aWy8MyCndll+Xn4XJ8ImQGfRJXZ\n6iR5S5RqClyo0a5HyH2CFq6BfxaJnIQM/lUiCidNa+Qa5hOIzdVW6zs+O6PX\nzX291ORtxSBak41cL5f0pSsw0X8ljJqNEGqZr/jXd4O8uRpeu6oOGPgxSS8b\nXCzb\r\n=fyMl\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"b4c468a49332682933706d36225106d7ab046888","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.19.0/node@v10.18.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.18.0","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^9.4.0-rnn2.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^9.4.0-rnn2.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_9.4.0-rnn2.0_1585082742995_0.814952299061446","host":"s3://npm-registry-packages"}},"8.7.0":{"name":"@brandingbrand/fsengage","version":"8.7.0","license":"MIT","_id":"@brandingbrand/fsengage@8.7.0","maintainers":[{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"}],"dist":{"shasum":"95dda8f7dba7234e91b25b479b3c8f9b01cc0ebd","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-8.7.0.tgz","fileCount":162,"integrity":"sha512-28toR13qcPuTWqVbUq698Rel/ux/2+UAM3a5LEhVH2SytPGNkm2SbJKMhoeJzXgWnGiRoySo0LWTDJzS8J+j/w==","signatures":[{"sig":"MEQCIBpTkqrJqYTYw9fGEx/J6QwjmN8iZe54hI9M+msYP1+1AiB5Ic9colCb4YLO65CKTIP40PSBz7AePDca5kbYn667WA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":366761,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefQyiCRA9TVsSAnZWagAAyhIP+gPJe2iQV/DQ2CNoBUOd\nYImkcxlHbpkbEBnSINXKIseg/AAUpLu4lQqV+z9sRBG1arzEUSLrUfF34MAb\nMoI9bwB6r8QSx072QkcpcARFsdGZHfL4RcVTfmHIi+EXAH1slLfJ9mmhiVW1\nEEjbXniSGLpW/CG5KVqTpMFMaYeZQZhv+hHFeUGl2oGIZshFFpIgO/508wo4\nbu+kd4f0ecHehU9YsSzNbKgoSdMIH21edIMV/xj2UHDllQ9zCi7V7ia2aea/\ngvwQIs7cRgCeU9KapXKil5VyGZqbPOcDvoXG/GLfQQzK0Ou9etsCONwdP5gP\nyTNuDMiKANhFn+GroTtaCDtooxUs/16KanTSJ4stElgkCb4LFnkQ4cbWDDr/\nqVKKA6S60NOObff7HMuj+ToLiz7vEtaiA3oHu3mIcCf/LyPhVu6vyBgdl0Yk\nc6HA4oDSeKRolfkmhpR4nLFlBwBItFD1K272p0ZUcz+TinROUVBtSnmPdPOk\njFGSC3iqlhDzbY1AWoX6bfmR5KQeeRgudnvM3hw/C45GRrGqNHuXKzMTvtIW\n7tX74buoN09T3eAfuz/WoDcmLsiF9ZuueqtA3LcRUsnN0BzcQNfe6eMVKWcc\nnRA+onh1hQa04TtpCM+752SbHb7+plXU16yXkxLlqNR9vEvoLruKEo+cW00U\neOzJ\r\n=FB3s\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"711c217b4bf0e31fde902cd46591ccebfeff2fe3","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.19.0/node@v10.18.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.18.0","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^8.7.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^8.7.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_8.7.0_1585253537768_0.3579229175520746","host":"s3://npm-registry-packages"}},"9.5.0-rnn2.0":{"name":"@brandingbrand/fsengage","version":"9.5.0-rnn2.0","license":"MIT","_id":"@brandingbrand/fsengage@9.5.0-rnn2.0","maintainers":[{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"}],"dist":{"shasum":"99ca89e312f51e5ed6239f1167091188a52461c7","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-9.5.0-rnn2.0.tgz","fileCount":162,"integrity":"sha512-VEtFgIpQ05glmEw5HBVUoPSuyUn9B5so6MBynakiVGQXCUBSOI8tqlLyMtDbgh53PbFzfSeo0bPzJBtuAoOTsQ==","signatures":[{"sig":"MEYCIQDRyCEVA9noMDIqzY81BeZ7RLBwieRWucbh6XL+YxTNuwIhAJv6kyYDrKAvl+wvUb428z46RtjW6qWGKn2rxKzr4LZN","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":368015,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJefkaXCRA9TVsSAnZWagAALk4P/3gEEMBJ3uOz51XR9x+9\nfuu61+mlbxxh4l/NkWvC+jwv3cQCJOPDs0PDc9sfh8FBZI3gwRBXkAmKfmPh\nIWuph1zHbXiGjy4FEo81e+QFtLKNsfaXV5UnVq91vFEZVo4opnCFD9i7JMJs\nraVyj62ATNz7S+kQ5uBYLh+vJZ/3BLAksbTX522ldFzHody1uVgMDLuGAp/U\noXI0DdDRDe8zMRbPE2iLUtXWQxhBS7RtlePNzKQmnlPMInbCQq39N8SRIaJt\n+tNgeu2qzBajccrUUOedNotnPUw7bveOztKvk51GyQsbzXwGgg0QUJ+pjX+H\nzMDmEw3F/lT681E6w8oUPTy04v2BgJEL7pgwk65QKT6dj0eLNgovY5ueVqPY\n3DrF+jrN9UIy240/PV7JJcz8dt5iuYza6NTvLXVIrvhuuA77ViOetyqLVSqM\nahYLIwLS/NSe6ZF05BvDhrwNPCF8kOOR3vqMCH8wZNw0ylkYx1ea8q45UaMT\nGhOV2Z/p1AskzD6Fvu2SZnjJWTY31CwTSyMDC4NoC3y6dt5rNwDkD/OYvStF\nrKPTeGTdd2ZgoME6HnWvzMry6yAhmS1gWkrT7ydwWFbpcxWDew2kjzZZ3gaG\nfhI/2ZaTW0kSmPiIT+lWaD4qWgnqNy3A3EfaS1m75KItZmhAeY34UFN4uY57\nxbt8\r\n=qwRc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"43fbff41d8b474d1668e88e6541a50ec75c77af8","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.19.0/node@v10.18.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.18.0","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^9.5.0-rnn2.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^9.5.0-rnn2.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_9.5.0-rnn2.0_1585333911344_0.87793527705526","host":"s3://npm-registry-packages"}},"9.0.0":{"name":"@brandingbrand/fsengage","version":"9.0.0","license":"MIT","_id":"@brandingbrand/fsengage@9.0.0","maintainers":[{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"willwedmedykbb","email":"will.wedmedyk@brandingbrand.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"}],"dist":{"shasum":"64d344dfc57ddf04287d64b49d86a3488876a96f","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-9.0.0.tgz","fileCount":162,"integrity":"sha512-C7ns/dfZ2xS2O9yKlI+4BHAnf6aD3Idrq0EOdsWmltF41PwdzHCV8u5TTsRVGrsUkBkuBp0HPQD+Gj2IqgPS8Q==","signatures":[{"sig":"MEUCIQCHV9mUjSYBBrBsmQ4n3OKm9Z+XIsrQ5QkXojI0dg+aPAIgZo1U7HvB+XOkDzd8e5vOJ4Jo1Vyla3EzeTOrgUO578k=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":400332,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeglk+CRA9TVsSAnZWagAAWXIP/0o/n3GfCmf3eEVGJGW1\n4e6IIj2nhe6lNsWz23xKOI66d4JWbA4tnaB6AJFPz9DSPOeq7xv5W8P9n3pb\nTuzTIg46bzB/4shIPfG3qgxjz0A40Xd7Ho3dESHWgryyNLknF4kLvzI9hyEF\nMHSdDPIn7ztSnT2iMaAJ/+lMgIO8KlScl7sUsDuunwHLSlS42ZrIARF3IaQM\n+Z3pWtp44e2t8i5hb2jGCccsJEmOiQpJxphto2otSCb/4CFa0JuwoPNyJ39R\nfF7Z5+9yScJBBpD518sIMdA6hcAR7U2QPdGFHF1331kMA1Qh4AbK6Imy1Bet\n5RWiKvSKEkifn6Kq5dHQe6Si7sPslMNYLwqmIdVgigIALwvk4pfjNgHNv8IJ\nXz8lUGS/JlcLwqJ5OOamTgqIsIot0wm7QxLaC6pI8c/6fCYGYBqOjPsFFYLd\np3EyjHsQHC3kyHd4xvaO31BF1GJo9SIEthQ5FqaH0vOy3qBEBLbUUJfJSwB3\ngsLUZ4g0McUvnCK5dkM9sHsNp6oDNn3nh10YfoR/Elo8XP/XbWZVBPKIZc9b\naC4MPBUoJaEF+fHQYIFVi2CevFG44PlBs7BDDBwv1jcPn09v33i8l83CI3k/\nOleEJ1gXHsojVZR78NtYq6Gps90pI29Jo6kYKFgsfFwk0g5zF5ywJb0iTMau\nLklN\r\n=V5RK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"2dbc68fa128d991c50278f96f66d6f5441aa8443","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.20.2/node@v10.18.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.18.0","dependencies":{"react":"^16.11.0","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.61.0","@brandingbrand/fsnetwork":"^9.0.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^9.0.0","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_9.0.0_1585600829537_0.0255401451279218","host":"s3://npm-registry-packages"}},"9.0.1":{"name":"@brandingbrand/fsengage","version":"9.0.1","license":"MIT","_id":"@brandingbrand/fsengage@9.0.1","maintainers":[{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"}],"dist":{"shasum":"1dd6df7eeaf9a2d0020efdd1d448570a01b21e4b","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-9.0.1.tgz","fileCount":162,"integrity":"sha512-E2f420BbVxjG58JvYIcYGrJi8qLA6TwN1Ds7l5FlA6hTeO3Huw7H8jAEujdfx4C23PtJnd1EpAqfltk1ct8AlQ==","signatures":[{"sig":"MEYCIQCWCeeuVKdh0WSUzZWygoXgqgXVacI0OCJf4yuSVpeyeAIhAK2F4x8chP/o5mRu3/rJhmOhVFJ42dNAnaoQeG7bFX5a","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":400493,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeh1qPCRA9TVsSAnZWagAABKEP/Rrqup1qDBOjMEuh1ks1\njjtNlvpAnJmPQazBuTGOVnqA+1ol4CGNt+Op6nCF/3eP9y9CrbRL5JP3rI5c\nz9Pe0/AmPG+zVfiYr/OPH3b0zcHrDA2EisEMz33EAeeiBILGUVf2hpo77c/W\nG7qLp/8rnyzW41lPEA47ibtBBbHoXRKbTryYplXhnWHAInVscMgdwzOEp+kX\nXLDFTXf9EP4beMG5IFvQx/Y0lvUBoLlodXYAdz0c6fkN8yfQpIkPWQYBhnCn\nCL0QQICe5yB480Pd6MMckZufUUwiZHFtZmT6G9RGzHC3qg8+wSRu9aK/Ef09\nXhKT38gmq/XeD+3joDp7jlGYnwbYpU6p7iHxNmRWjdyvQ5CNVI0EVA0ULCrA\n0Rq+Vrq/1JkVe5e0MVaWirk9JLqvVIQsxmX1vUzMzU+m9pYj8tU7tCmpJ0oM\ny+06Bt7doU1WzCUvFbVISh4CZZpDMQWzodcgAwASwALr1Kh940WF7yvXDVem\nDZJPKHk4pb4yujxXl/ifNCNGHGqGvjE+135UmdQ1EhrYRDfSFjUISGGUbfGZ\n7ASJwMqclIIw81fz/n9QEyI+VQuiEh4FiiSZlOzdo15HjADw5qvTTsni9mBW\ne2PGNmJYhqS4XvIiCz5X/QLcAHTYqI2rxoIhOGpGBomw0bVz9sl0Q6oqIF+J\nYTi5\r\n=g9gw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"d1c8c10a16766dac152d6d822449818dd3826eb5","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.20.2/node@v10.18.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.18.0","dependencies":{"react":"^16.11.0","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.61.0","@brandingbrand/fsnetwork":"^9.0.1","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^9.0.1","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_9.0.1_1585928847035_0.20937226964348898","host":"s3://npm-registry-packages"}},"8.8.0":{"name":"@brandingbrand/fsengage","version":"8.8.0","license":"MIT","_id":"@brandingbrand/fsengage@8.8.0","maintainers":[{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"}],"dist":{"shasum":"c63bcaa05df9f44be0f13960979063ee89a63794","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-8.8.0.tgz","fileCount":162,"integrity":"sha512-xHlt162fZBT9INVR0Bn9ily/4+jkKTrG/Hy9ufPHlh4dTpaZV9O6B7MdF9UV4rQJgwNY87KCA6b2+6TB9I0KAw==","signatures":[{"sig":"MEQCIEwLqW/4QrMuu4K3akp6jPWUOsOXMY/LH0VuSn1bLYmnAiAv63/qNwGIB6yuVHOIXjZIEs68stpqGQNJVbK3s8yY8A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":366921,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJej0u0CRA9TVsSAnZWagAAgkoP/i/2frRRncEfVTfISujI\nmj+/bUQYeczYO7ZUAYOfUQYfashxj+mDHkt0GF0bcuboVo6IhJmD458hUg3P\n6pvzU1OCdys7Xob7LKiBxXiT4xK+oa85Ng5WQv8k/l9W/vh6XR2cA+AzWTPh\nexE/UcXCtMdrRfPIEfIUandj61OSksv81IF6cFbW0TZcqyb4SK7h7akunpRy\n+EOOiNjm0EDPxhmBrQupV8om24xL8UpRvscRKUbZWekpWmmuN0ROQXJ/SNac\nWG6JGucXi17MF9cQ2UghRIO3qASLnSKznYFHkHy5D84lMuumdkIsh/BN5aPe\n9ZXenB51AsiA2cYpdw+5X1d67GZkQgdY6eyplfQAEXZ26hnUnBmSpqX1V95e\n/IgToiNLdc8Rdj1rppfuSZjP7pP6sXHKejVuaGQtZfuzNCX087FFaz0AFI7n\nVpOhv92Cu3jDjO6h3vqonUMDN2m7/wTTfTCQwkAe8YVVXO8fw/eFICgjC8UU\nx38MP3FMeaz3snoMdndfwJtf6Wv5YgKPuIWXE8J+aW0XqeFr9XJtvkPKnYGs\ngju88um4AeSuFV/TRzZtb44bDwZqWdHeFf3QuVnSRoEJ+fA8nCuS8SuZM7Ii\nipyDlGawNcKfWYzG/ZlUCDZ3VU0SYx6gIVNS025s3Mrj44tGgNbSnG380kT1\nAg7W\r\n=yIml\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"f80c9077bbaceeb01239bd68755694fda40e9197","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.19.0/node@v10.18.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.18.0","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^8.8.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^8.8.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_8.8.0_1586449332468_0.6081329654841319","host":"s3://npm-registry-packages"}},"9.1.0":{"name":"@brandingbrand/fsengage","version":"9.1.0","license":"MIT","_id":"@brandingbrand/fsengage@9.1.0","maintainers":[{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"}],"dist":{"shasum":"21e477360d2af247048abd85ca2ea552951347d6","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-9.1.0.tgz","fileCount":162,"integrity":"sha512-vSBRhjQTdPyC0QLvZVB4HwG8xb0McwGU89vcobyYgU/shGBjJfgpEZzJjdVaH7h8uaC9SLfSJk5MV3V4N9O9Iw==","signatures":[{"sig":"MEYCIQC54LLeAhRUZp3Xc4R7CE1u5XkqgXMmLfadKv2xOz1fqgIhANYLfCChp0jJR9EcgXnXrktA+QdwtFYguZnPI41sTHL6","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":400653,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJel3DXCRA9TVsSAnZWagAAvyEP/1NgRP628bsuLaAx8yfG\nrpHrSoGaBdz1sSzc3GGyh82do1ihJUVrkJjtwJdxCmPqjLxByvE7M5zu4pqY\nKaaAPMJSWbngwGB8uEnImbGuvmZT8YTnvIUv8hyTXUHce+qhDTQHqeCGk1wk\nIoEQNYeZqnDfAM5Et3mi5HjFLRzO5TkE/GfOkNk/x9sDsEx2StED5MkzGS/k\ntb94v5GkVmDcG5TpgxH4xEREklG65NAGX7MajEg0njMFtY8cReLQFydkgENZ\nBejS+CtshxKZ0MBcBcXKazLkHtP7rvpKVs4IuVaDVLVk/Ikdbq3THEc56NsU\nxiPoUAXR5c4IBMdTP0EllI5C05mojgJ1Yny2r9jKKjRLSZVPt+kmfcp40JRj\nRzIMzV+yoIul7dWzWz0fXwzvWt/h5iaX1Sno4a7x+mWpFoSKsdBciX3IRPa0\nQoC0TcTHYKRO6KfrkY0iKHIA4zQE+otNsCYOsXLDhQ7yx8kWA8rl6M9WE4ae\n6p2Uh6sb3zUSGevCl86UQpno61W7z2+0zQHjt3xlsFsxrGe08duI9GUtuTfn\nO/4g9q/p+eEQi1NEIM3jBwSvKRzTKdJs2nDYnBwkuuECq2UbStMFbEHOHHoL\nqZXZAtXKphtip7kfMGNtolHqYBS84D7G7GivwNnI6z/vfyzIvgf0e7yyfyGF\nbm1h\r\n=nqZK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"314f9a989750bd7e5b54e65e3dff946235e38e99","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.20.2/node@v10.18.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.18.0","dependencies":{"react":"^16.11.0","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.61.0","@brandingbrand/fsnetwork":"^9.1.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^9.1.0","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_9.1.0_1586983126609_0.3775784490724612","host":"s3://npm-registry-packages"}},"8.8.1":{"name":"@brandingbrand/fsengage","version":"8.8.1","license":"MIT","_id":"@brandingbrand/fsengage@8.8.1","maintainers":[{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"}],"dist":{"shasum":"e5369c848c76d5e4db45883968bb776fee0fb097","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-8.8.1.tgz","fileCount":162,"integrity":"sha512-7EAFdtt9NQyp4NKXxQSCr+lUXjLWRdFLqVll7hKzBlO09Q5pIyD7EVRZh4nRG68UkT9+jJZelMC+/P95PZcMtw==","signatures":[{"sig":"MEUCICdprrChMlIQBoO7c5y+zQmIRpoXsIOjtAHBS4zyy17nAiEA1yuRFREFK1N16KeAO8EJMVJdJFQY3m1I3ZA9CIRblkI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":367082,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeoy+SCRA9TVsSAnZWagAAwjMP/jRyRGnkmCaQsyNKirEO\nBU1qgDMRoBNxVj+6NQOj4DrQL+9xBd5szUsyHeD0uO6eoS9+EdshpHq/hUne\nqh+fkazO+51x5fYHJn4cdGNob0PW6D5JNMpHSPNgdFA+nTOhYZKbx22ITb1U\nkOE802y1L6PWjvYvMEKOjJJuG/57q/VSkNvt8142dUO4Aj606ysoYybx2e+O\n4qEtpYiMcli8aU6IJ6mxYK4dEz41YSUsZT1feXJBZboUozH3yknvJECbLa/e\nlcoWTx+ooTsrdZ1nTmYyYWJT7Gho090g5dL6b0IQY6Y8nJXBqzMsM6mYtAEZ\nufUs6ayocVDdqjVulNK9MUoAP4SZ5LgP63i88xfSy7rE6C7rCxYsIUcWZ5bA\niWub+wz4ChxGorNTDmVFIA5b7ww5er1V9s9Sdta3JeBMmYfHBeOSylBIXqRV\n39pC0iGM0XIs6Rb6ROlGr38XcbY0XrCUZWyZWlecG+CVpmz+g2RZDmzrrSN9\npwiimyTslWdraNi1V83cOCo0g+zxSAsEc/B34B9kT/rwFrv0YRb753sZlR86\n8uKV6ZN4HJ4PdGSbrSgz0V/OODYMJlBKNTv0bf4qKu0XJgpH5RfFgQ8+qL2a\nrgqSeYvcWi2jTFcdbbgCAImPeePtQFCgFN21H3O6/3Pwk/j7PsKZZH4wbAdz\nkIjI\r\n=ytcG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"1c76efb900944e2ce66e68a770d2d121e37fc6c7","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.19.0/node@v10.18.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.18.0","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^8.8.1","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^8.8.1","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_8.8.1_1587752850260_0.3846200308687","host":"s3://npm-registry-packages"}},"9.6.0-rnn2.0":{"name":"@brandingbrand/fsengage","version":"9.6.0-rnn2.0","license":"MIT","_id":"@brandingbrand/fsengage@9.6.0-rnn2.0","maintainers":[{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"}],"dist":{"shasum":"a5688cacce8eb8c66e093b0136f52f5a489b4550","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-9.6.0-rnn2.0.tgz","fileCount":162,"integrity":"sha512-InM0eIcb25Mpkp0nJAt/7PIiwdO1QDJubhiXByr8n8nHiZj9wM5eai4KPOAsbKV/viMhlEg0qeaiH0rZo31X3Q==","signatures":[{"sig":"MEUCIEttnMLyK8a7KX3aTdWB/Ag2MfScKxDarbKOdp+J5hLuAiEAhzZcXDguf7XgZMYcX3gQsDy+K2YclVwL+UuqiSbe/qY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":368196,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJesbvFCRA9TVsSAnZWagAAtpUP/R43jIDBVDLay7BuISaw\nOC+BVgtdlTgDFsgMi1xlbF7QS4V26Qk7cC0SoYOjOGVVNT6XNZ+rtEsvhU6N\nPuXrwRwMk9f2wLsIwB1U2OyAjDBNzIIEBF3MC5zn3rjZIwubtkVNQj4mKjb5\nDsDVmI+c3vqMkzjkrGigOGQQ259QuNBZOzUkquI2vgp5x8gdY90wMpMrVnNP\nKpatlVyM5keQywVGSgdKAXX2jsnunYY5SuBPrPFy3tA9hpL0x5qyCI/mMcPK\nyP7zTV/k58yQ+ENi7moBYcpl+0RVrN+byMSaTFA5VcU55gBAuE6GdTdJJF56\nGl8fyIhIeXKyhMYGvlxLX0oSHlRMWtUr/7oomGKMOP0dWQTyqNrakHTUoREn\noFtSNkchEP6mZ9TrNJyxZiWSXmiRcCgos2pwQMBshQYCgcddfpZzXPzZnl+X\nL3/RlddPVsaNEhHP+3d6FTQwIT3xnsdx3M73vmXBqL2R6m2jlcMwpVlTMHNq\nyo7q8tUk8b6+fbhshUFKNYwKIyRW+94WjLpt/tpMKp7299O3BroXtrKQVVNw\nL2k3KfiFJR6a2YYBSt6x0PbPBbl+bncnu676+vu/SUjOKzD6BWaeBtCL1kmo\nH+kdivX+Ki4GW1v8Aim0h1dOBnXtqKx79vabcMAnBjrFyBkj92hXPsy06oAl\nkLZB\r\n=gnmJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"936c2a8a9b8d45f7541f895f45c83096689fab01","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.19.0/node@v10.18.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.18.0","dependencies":{"react":"16.8.3","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"0.59.10","@brandingbrand/fsnetwork":"^9.6.0-rnn2.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^9.6.0-rnn2.0","@brandingbrand/react-native-leanplum":"^1.0.1","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^7.3.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_9.6.0-rnn2.0_1588706244579_0.5304167949771774","host":"s3://npm-registry-packages"}},"9.1.1-alpha.32":{"name":"@brandingbrand/fsengage","version":"9.1.1-alpha.32","license":"MIT","_id":"@brandingbrand/fsengage@9.1.1-alpha.32","maintainers":[{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"}],"dist":{"shasum":"ade915bd34b403397cc5b2984ff7954142ec8303","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-9.1.1-alpha.32.tgz","fileCount":162,"integrity":"sha512-5HE68IhMFk1Rer/5Rx5LISg5UCvVKtElCweZxTL8s6WNiywJ25BblX0i4CPRfVeFXs4tzk9fAyDnN6hOf+0gGg==","signatures":[{"sig":"MEUCIDM5Q6BcImBK3LJy6wYuq24XoTyrbAa047mLNdMaYixSAiEA3xIPD6hSntN/jncphgNLi1yrjnr5o71pt/zNl67Sm1A=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":400707,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJetG4BCRA9TVsSAnZWagAAIlAP/RJRBQsvFBq/75TY/LHI\nxJQzLJcYGlIOWCSeYHm6/X5D9JUB6oy/taKOG9WsiZTjyJ+uohzqg9vzzv2H\nqKEL3L5OC5v2lU5bu2IvIsgJT74Ck3fNoQxLkyLTmqB3gjT4dr+imiGg18Lh\nhf3+k5F78Cxe4uP8CZ8m6YvqYyQyP6XjXbexSFU3jLqSqfasCpeDxwc2URC5\np42YZ3LsrLVfjF6aPhp+oUmXjqCBBEW4uPaDb+wgm2BGUfCkEsVw7+ptsxs1\nozeRXd/yMOkgLUj7ovZFLU4bvA3F9uSdNEalk/Ouz8q1E9oqlRWwzE7zwlFW\n8//36HIqyxY1ikagGkCS4gbZQv4bg1nTsJpYo15lYP4M5EFUYWuu3gIOIKyd\njg/kIeRQ6srQ4TD0p/nA9wRxmPe4wnCY25kz+j9VN2SfKlVcXozrenlIZJYm\n53Obo4XK9v6QgCe68QBn6EAWCNqfZ40vxsKIHG5Y28MEpzUNc6/JpddYMNMV\nNWE8BrU/6Hp9tPaxJNW7pK5NCLk3NJ7P6AOU8DcdhLa3d5q/Px4akp3xc6aQ\nqc8tdKquPHheOeQc2hpKbQEJ4LieELR/eREh2meZVl1Wa60Okco+r3C0mCUI\nFvMLCRFtRB94K1Dzv4yDGWKvm7as3KlHSu9XOPaXJlgLkZ10sSMuPXQOFJqX\nk0mM\r\n=sVw9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"83e2dc5ea7617d989a5728f8e202dedcc40f5249","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.20.2/node@v10.18.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.18.0","dependencies":{"react":"^16.11.0","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.61.0","@brandingbrand/fsnetwork":"^9.1.1-alpha.32+83e2dc5e","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^9.1.1-alpha.32+83e2dc5e","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_9.1.1-alpha.32_1588882944721_0.19748278609326153","host":"s3://npm-registry-packages"}},"9.2.0":{"name":"@brandingbrand/fsengage","version":"9.2.0","license":"MIT","_id":"@brandingbrand/fsengage@9.2.0","maintainers":[{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"}],"dist":{"shasum":"e73e02f2077616d2e4ae89c5cb2ecd9d34aa555a","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-9.2.0.tgz","fileCount":162,"integrity":"sha512-yMIylZrObdYnx+ZUfqBS39C4hKVx/MTX6dynKg8EatN0xVSjL8Y+5yb+9nmqZUJ8cJ+P3Z/zLYnjeWlWn0sUVg==","signatures":[{"sig":"MEUCIQCn3w1JC+0PX2/HGOTF1/8vk61Yv/tzQ0E7xS5WoiWFkgIgPOe8hFozWDMtYBI6q1H6JwXPTUnBAKoo2+ZM7NarzH0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":400813,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJetY6aCRA9TVsSAnZWagAAlRkP/2j5tmqXirqwm9N4ulAk\njgxIZCiXlhG0Nj6+BL4F3C7quE88v0a5aCTOIUP4bRprMEn8LNoaX0/ujLmz\nZnm8ZsrCy5dMEAhho70Fd4dyPhIVvY+vEMa8y8K8z7RDVWsGt9NcMv4IhuzA\nhVfmZDNosJjsP7392WQcMyjiuq2o/dMaszmFs0ESP/tG3LPriaFV1GujGJLy\nuRp6NU3dy+nnT4dhZyJMDtjg4iO6T+aNAHxb10YLMiT1XmDTZb9tFKnXPWYA\nSwAWgR8LOwrB8cjE9pw9tUwlsp3SgKcUY8YT/vOa50mo5Su2ofvCAm49ugT/\n9kjdgCuZhWTy2dVjaH6IueE/f6gFhDhnED6GIkPKXCTnk6uJdN+4Qx2Zm5hP\n3GhlswzmMHuOuqjxcugt78bYrGrAxRo+kBnNAZRplxnacKKJP9eBD/ecW/it\ngQpcwq3zuyLD8jn6V6il+WCI67ximvNuN+on7PmsIdG5NOnFe+dCrHH0E7QX\nhCIku7sOECtWFTj7uJZRv3g3hUoWt7EeSN9uizXuK9f6UTHcE6KsFtU7SVRB\nZZ3wtG6rcK/8Afxi4qxtG3O4pTwhUQW9d6lkzH2xMrsw5X5kFhN7N2jhU56q\nK686y1EtYTmpi7rPYUZOD17pNg7XrZioOvjGCNgGbvM+BNMG3g2TDr6uldO6\nARm6\r\n=NL7k\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"48a9ad9f01bd761ce711f5481f9dfa2141f561d0","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.20.2/node@v10.18.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.18.0","dependencies":{"react":"^16.11.0","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.61.0","@brandingbrand/fsnetwork":"^9.2.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^9.2.0","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_9.2.0_1588956825803_0.8955986308394621","host":"s3://npm-registry-packages"}},"9.2.1":{"name":"@brandingbrand/fsengage","version":"9.2.1","license":"MIT","_id":"@brandingbrand/fsengage@9.2.1","maintainers":[{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"}],"dist":{"shasum":"c31f166007e4105cb49ba36a7f9d1fb719c7b720","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-9.2.1.tgz","fileCount":162,"integrity":"sha512-JIVOIemxxO3TNn1VhOidLza8v6f3HNYo7qz14TtyZAVq8/oWjjlWIiJcDsnwu2u9skunCClje0Ro064/BFdKvA==","signatures":[{"sig":"MEYCIQCw96JLZi8gvIzJIbyj+0X9Dj9hJolNdr1qhg51G0CrXAIhAOX3qO5k/7/s2T2wRJbvK5ytSOQTEHJx00PSYncg5RLf","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":400974,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJetZs6CRA9TVsSAnZWagAAsQYP/0hwVzXOxhEG6umeAgx+\n9IkQJxw/fQYDMd68FeR0s7fqDyim74Fz8qsMcdhk/KowikUORtP/fcdH8O+k\nH2L3SlUNb9eYJQJV84Y+zjgi+5Fa00qD0RL/MvHRLZ9ZShoeKs0DckVSthsf\nly+NHgmzYPDaLE89crThb9T79TOtcVyA8hKA4f8uw9OIcrHe+iRUaQXaPZCd\n/qzir4zranZJi8gMW1Vc9uYDy38AGi5/yRIGkBhB8mzzujf2DMdtRkNlpIYA\ny8Sq2y6hNGEplbLcYTcmQ/CkyS2iqR66xy18gS0ihuGeQd2odhIlkd5o0Hxs\nAgozoi64UwqZKuhBcyiXD0ORdnxIK9F3ulzG94oItIKlpYdwUc1D3XOBVSwX\nxO22dqO5BRPCtbNxxDDJjPo6AJ4tY7MuGdRePJ+w7GYrn2Cdvx0ukVqfDOSN\nmdTJapPz/y7DPoFJ1poHDEq259i4JqZT3MRDc9dJ8Dtd9EDqYl2yXpX3Tb87\n0XS26ll+ww4vcigM4o287y+sewOaqlgf46vy9RGwfJFKvTOJTWSjSkFlp7hv\nJUzrJBY3JH3CIOjku9hIDteykP1vydAgamr0da2Zuc/Kkj8PikUcHP5CyUFd\nEMkrmHZzqV1i0gdh+NlnjHGzHDSSNup1/AiH/MKL/cu07+5grjZkuTZhPpP0\nW7x3\r\n=YsBm\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"edda8568bef7bb4786a846d1c0fb39308218ab9a","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.20.2/node@v10.18.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.18.0","dependencies":{"react":"^16.11.0","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.61.0","@brandingbrand/fsnetwork":"^9.2.1","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^9.2.1","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_9.2.1_1588960057634_0.5459994087123137","host":"s3://npm-registry-packages"}},"9.3.0":{"name":"@brandingbrand/fsengage","version":"9.3.0","license":"MIT","_id":"@brandingbrand/fsengage@9.3.0","maintainers":[{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"calebabrahambb","email":"caleb.abraham@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"shaheedbb","email":"shaheed.shamsi@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"}],"dist":{"shasum":"1c2c8484e0b5de74e995aae6f065741817060825","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-9.3.0.tgz","fileCount":162,"integrity":"sha512-HZmAXZLZ5ENcSDjTdUyVqzoRLg4IcnVmempj4z/h65Q3w8BzIkG8KAB7tLM9Wy2v9nfHqlRMID0U+0j68vRZtA==","signatures":[{"sig":"MEYCIQCjXoPGipHJrNP6+9l851w20K/hGe0L18EJ8x0HmrfVmgIhAJS+t0dlY+rmPEshaVeh2HZ8YhsB3AtrajBZHNIs1zV5","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":401134,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJevYS1CRA9TVsSAnZWagAAyZsP/3gA4Ep7ezH0XH9gLNan\n1Ss9cZFonB9WqnVZAvw/yWdULrlZhuK84f8SbSB6aBaSIIsIXNAMywyVfAKN\nK+D9f8VmX9qmUQBX23j3BHDzuwEnDech30BPrr29V2nh5fMiyJMfYZMzYTuN\nq03W6iR60Dtgp+x6bNxssDkFRsXntQRcM4KPGLsLaikNuxPtyH5aMNOzQEkg\nM3XggEaxdwgZAD1CcMESXxRJ6r5weV+NasRGjLoPagQSYIywFrcn1VGO+J36\nYRbEhj5MnvY7nfn1EjS+umdTPf31wm6WvCd5UbzmH1jOjgqY0uOA68pwbDoD\nqCknsfscYbZlc3PEo3r8CG4E14pwTmNEVMG84RpT/tISNZIPM/hi3IcVZdfD\nbu2kk3ucgtDazmkf3L3XWxMOWsdgn8MFE/pwpwS3fx1MSSbSuZvcej7l52E4\nwSBWOrelH7QFpy4DRD+lYdU4tOYAM567DbrE9ggtsfR+E2RDt1dReJ8nD3B4\nUDEdF1XIfs/gkUmBu5ymo/WvbecxUZymkRAzf5eW0A8a/Mg2wAlkHpbJFkYr\n2wZD3KP6RC406SR31IUOrnnV8rw8nHbnSd2zC6+9067q3eluc6JzhtbNZIPA\nfrmaQf3bYO3hWFSHip/eQS2A5OCRmpFqWwnOOi/bEr6JMRp3z/FnIK8SP0B/\nLleK\r\n=q+5J\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"36d8fa6105988769544d633aa5edf8b6a2089d99","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.20.2/node@v10.18.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"10.18.0","dependencies":{"react":"^16.11.0","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.61.0","@brandingbrand/fsnetwork":"^9.3.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^9.3.0","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_9.3.0_1589478580398_0.9079156024382218","host":"s3://npm-registry-packages"}},"9.4.0":{"name":"@brandingbrand/fsengage","version":"9.4.0","license":"MIT","_id":"@brandingbrand/fsengage@9.4.0","maintainers":[{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"}],"dist":{"shasum":"edb931c3b0a51b30532c5e6dd4910b049c4567d3","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-9.4.0.tgz","fileCount":162,"integrity":"sha512-hW7DwLwF0RF+bycP4SoGYUtFAA1xhi933rvDho1dKOwy2u0B+sim3MDFZ/9JWAkgYiqOg7cPUFb0HwacPj0B2w==","signatures":[{"sig":"MEQCIGpgl4CmJ0Uu82FbHMkFgsWRupM7HLwPbIw+CLsJMALdAiAcagmzCav+ahdALAs7i6a7hcQqpTlNYzITkWcWfVTSuA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":401294,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe1mklCRA9TVsSAnZWagAAy6MP/ijtVEBILY7SMKRrmtaN\ntckwxzaPpaG+NuTQXFqIhPopLObnxn8LsqmgVOP2e/rM0xsujHqolbkEtYNW\nZlZxsDxFVVAU/QYDJR5BETSrqcw1DPLBlIqnKyUtHhJjMUTtpAAl1J9LyVWx\nrnnAq7kVJVoPJBlRuz4mT1/iBnY36D9l3AL3roGunHl3DzzSdN7f0ECp4bJl\npGuOAyP5ZkbrMn4VVulwpqaXHDdJck+2Y1bVW3LERkpeTx6klPw/uOt57zea\nmj0ZDjMluGvz8cLiBb2N1f4mJ2EAsQHkULzVgBpCl0prFCHzJPCtQ9nA8pvI\nQ+BFdNqeGJM+24sjvzSc7FMP016bgQfE06xALsrkjDM9yNReNZObmrR09WPn\nwS9DifwZRqfCoQiMgtEfFpQjly9mwVKYNakkkpvlBh6toVNdn6XKr2meMcPx\nd0NpwIbj9wKShKuCuTBsHB5RNN1tl6NkQfQPXU7WKB38+vhuKWdMyhNN61sB\n+qcZDL1rEskj9eHQwEOwPsQKNTv1v8jlZVO+J7US01cclC35TgMiR1HCBHwF\nuQDqfVUzSRySprqHTPFGAI5RbMFAZ6oMFta73pRZuS89zYBblJAzc373BhO4\nU+TO69+YaLwulEC7lZ+bn7hNS4XQN6QFRyIDPVwcnwo1wx4d6QMHqzXSP6hA\nnN/S\r\n=x68t\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"b40635bfa9c0792b8df243b060ebc01e15a6a558","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.20.2/node@v12.17.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.17.0","dependencies":{"react":"^16.11.0","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.61.0","@brandingbrand/fsnetwork":"^9.4.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^9.4.0","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_9.4.0_1591109925250_0.313333383205467","host":"s3://npm-registry-packages"}},"9.5.0":{"name":"@brandingbrand/fsengage","version":"9.5.0","license":"MIT","_id":"@brandingbrand/fsengage@9.5.0","maintainers":[{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bccda77db","email":"joe.pasqualetti@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"markignaczakbb","email":"mark.ignaczak@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"sentiurin","email":"volodymyr.sentiurin@gmail.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"}],"dist":{"shasum":"3872bae007cdf65e9c216eec050d3bfc567bad4d","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-9.5.0.tgz","fileCount":162,"integrity":"sha512-hIw8z0tMQCLPiZOegM2NOEtfx3LXfwKKl9z54ERZFvBQuC51yPK98w2NideNtyTkb3ZyRHZtV40hzxh/s5gmTA==","signatures":[{"sig":"MEYCIQCt9JfS1A1dRpmxLCoebHiyYrlEnLzEp4YGOYl8eNW2owIhALq8+hXgmFwobKidbeOpG4f8P0NGdyuycI1lku0zYW1g","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":401454,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe2SotCRA9TVsSAnZWagAAnQEQAIbUGKR7Uy4QW40L7Yj3\nMcTbtSKkc8a5bJW8yB/vk3LwCUBgyonotprGNRPuRbBX9mm8odOxq+2npY8Z\nNGP/pa7KV3IOTNSJ/xkZGMPIlgJUIDjxqh4h0+dIUtpDxAX3Qmzzdqm4ZZ0q\n9jsbThCPh6ETG+yYe8k7MEyCpGUCN92WpaYYSIRs6nqD6Y/Wj6HAqjeTM2AA\nzlIjLh2vu6aMOSiMjDd06fAHKzJO4HgsIvTWtVHuhOM6YyVDCbG5CkEvpWIU\nVwSl699ZA4l96ipDvWKPVLA0QZFriI7CTgIeeWhgfYXoMOoKnYHyKOSPhh3g\n3OZguv7OIURVzLk9RF5wzK8DMy+Fujvv/p3qFH8+2U9b/yAPB/XbEP4ctoj6\n3Q9kZdsQe4/D7zHPhU+pcBfhzXKrYNM04Ypqi/3oAzv82t1rPsDKoFIt8cy8\niGCP+LTI7zW9XWaY+Kg2Zlz91nd7dPhZ4DUqaG0NbMicM31NMZ+4weJ1y9d7\nvCETyVdMRsLw18h0WyxchA8MsRMCx6+OQI7QbusabGHD8NZ5InKZZchLefqS\niWEXAEA/Sj3pAP/4UruBCtvB8zfrIVGGK0J5Nt/gSlaUBkDQZ04Y5rSdNbPX\nE1HAAVDvjJIJpxnV3qz7t+ZOxKXFHeUPaNn+IznVYLptjst4kA9NcSwnupJD\nthbb\r\n=l3FM\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"ec37aff773f0f9c69cfa967e9ba68e7607fc3217","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.20.2/node@v12.17.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.17.0","dependencies":{"react":"^16.11.0","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.61.0","@brandingbrand/fsnetwork":"^9.5.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^9.5.0","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_9.5.0_1591290413155_0.09346118812938675","host":"s3://npm-registry-packages"}},"9.6.0":{"name":"@brandingbrand/fsengage","version":"9.6.0","license":"MIT","_id":"@brandingbrand/fsengage@9.6.0","maintainers":[{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"alex_npm_acct","email":"yixiaozhouchen@hotmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"}],"dist":{"shasum":"9ef43e5dd402bfcbec04e647439049693202ea57","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-9.6.0.tgz","fileCount":162,"integrity":"sha512-emRi+sXUX0hDb2GHTFPK6mFfnrOsvZw5ARL3Tvz78CB8Y2E/4ptDZge/GRdEGNB8AqDKRgaGRQKuNdR/FOlO5g==","signatures":[{"sig":"MEQCIDziFzPyzZ0K6siXX8UGh6G/v+7dj4BjszX7S9dDyWBcAiBnUkY3hb4OgnX3ey0EH5b4w6QrzNuRE4nPx4NoHum6wQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":401614,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfBzDACRA9TVsSAnZWagAAvW0P/iwxSDzoHW4jTwHPFv/i\nH7CaNPgRpNWwOANAKB/anBueRJef0bV+1j80HhW354MJgUYL0CBXiNOvVvL2\nVgycmJVqFHKFrmEDoMJ+3Se1GVJGcMkVEJ5Mr4trYrLPR8zCqn39wuYDvUYt\nZ08NLsLXBUAio+6Z4YzJM6PSqXRTqSPiLBWBmimXHkfuMZkc+hIIVPyLooGi\n3i1j4O274oJ2j4Zjw92P6JT2l5E8nNhX4qopj4uNfG9eM3hsMV4Mv3lSu9eu\nOZ9feBQFhLMmBEhreREHEduku/YZBlzLckxK7nbATG01cipwSeJigfvkHSIV\nRijzVuhD3x0XVelYPu3EROdb964F96/Dsy8F2DQJilROVyHQAd3tA5eXlfSF\nW2CbbC/x0IwonLGjEt6bvtH1MNNTUuBJJhi+9vR2PG7+agtImrqLRrCgAF6I\nBGE9yOVr+WgNHyY0yzdfPPR9QuC/BF9tMr50OpRxsbb4I685JYoFWv4882eP\nJrQZ0Tuz2cxz2SOUkyTEnMihAh6Bkgqz8cLptBMGGIf7aNF/tGY7hW+AD0+V\n+px3Xhu5k5tWhY2Ypak6Go8LrWjYdTZsmE9v3JCvtMggXahmYj2KAa61RQZH\nSJXxfxOipSRyElfscCHLA/oHo06QKBTv1LIqQ+6Hi1ZMLTzmdRr9b1Hz84UM\n17mP\r\n=Z3ID\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"0dcaa649c7e132ae740030d8c76338c1bcb20e9c","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.20.2/node@v12.17.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.17.0","dependencies":{"react":"^16.11.0","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.61.0","@brandingbrand/fsnetwork":"^9.6.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^9.6.0","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_9.6.0_1594306751602_0.6601795650267923","host":"s3://npm-registry-packages"}},"9.6.1":{"name":"@brandingbrand/fsengage","version":"9.6.1","license":"MIT","_id":"@brandingbrand/fsengage@9.6.1","maintainers":[{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"alex_npm_acct","email":"yixiaozhouchen@hotmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"}],"dist":{"shasum":"a0580958c5978756bae9459865a9d5d568ffc2cf","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-9.6.1.tgz","fileCount":162,"integrity":"sha512-JuQa9XKsVHIBsUF0gzamxNvxXuRpI9R4gHtUwQKVvV8akLR5wiaxHOl3neg1P1VagH8AbKrz/1paOKtiIBvPoA==","signatures":[{"sig":"MEYCIQDFv3b2QV9eg5zPUXYx1OPsRuA37cg3Z2bE+IxJ4BUQiQIhAN8Ao0hMSFMcyGSfqa7SdfnqyErjuK97Wc5/uRaBhPr5","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":401775,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfELRcCRA9TVsSAnZWagAA+C0P/3zJEWFFka9R6+xvpD5s\nxPDZFrq8d4TVJebGX0ISvrZ18I8HgEIZF/47eGhw/L8jbr67WLU/kxkQ5gWh\nJFsmHmzJ0f7ockJltUkV0gVxeLqPVvGrl2Y89ZhqBcJwZ2imqmOn6LNiP72S\nznEKrDhKwCpbHzYR8ie0moL984jp0O7s0AyF4Q/7wHOSOKGbGbdZc+g+8Yc9\nV16UjPIqCL4z0qSEofCvfIZfKhSlWob2o8yiDL8EIrqzALRELj7RJaJIkbe8\nKeYYqWUpY1ps73Wj7TvUyIpLYrmJ6a4TDblJMmnavIB4UXYilA7JBg/D+9Uj\nzeojpyANk/93wryXg7AT8cyblkRKi437yLyOjB6MoMmhy0sybshBr/IPLVx2\nK7/7bDZALV2FQyPYu6DOcfMmQ5etFZv/p2SxT/VgjD6xRXzaE6crLPzgMJDv\n+1mBuSvsjWPOU90vUWhCtyCUTtq4+y51ZKG59ooSaRHX1XW9tD+cKC/s+Htb\nqFP+lfdo4IEHKCfXppvfPYocKSWYi1Ss9obqZmxrcKnrvLJHYROlJMmwrCTm\n41Z34YDCT8LrRj7/m7LDTVFlTAdKdj1NvKSOQeOfTbVWaN3WGAQwbbgBJl1C\nNkEJEzDE6v5DNl2SVIWx0VAHZ4Zc8gRF9O10dwWZxpOyw6neF97w/Cf5IAKT\nqAFr\r\n=crGX\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"0516bfc45400ed6dd414c61aa379fa99cdb1c6d4","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.20.2/node@v12.17.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.17.0","dependencies":{"react":"^16.11.0","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.61.0","@brandingbrand/fsnetwork":"^9.6.1","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^9.6.1","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_9.6.1_1594930268203_0.07044800048822131","host":"s3://npm-registry-packages"}},"9.6.2":{"name":"@brandingbrand/fsengage","version":"9.6.2","license":"MIT","_id":"@brandingbrand/fsengage@9.6.2","maintainers":[{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"alex_npm_acct","email":"yixiaozhouchen@hotmail.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"}],"dist":{"shasum":"e41c201d146e1719fde1e9ceaa933ba482a43341","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-9.6.2.tgz","fileCount":162,"integrity":"sha512-iGJgiwlOKWXQ4K9vFwq0opY8T2EwXwLmI2nI6xkHMyWxCcJ4aq7Ol5KlOscfN9ZmrI123VewJcFSLOv/qOy5UQ==","signatures":[{"sig":"MEYCIQDggb1iwEe2SiRDD+Zzsm2pOMhm+kPhr43vNS7jPQCe8QIhAIIyBeofwAibjMY8bBawQ7R+QunDpcPMS9qUJCeTE2HC","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":401936,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfIFjTCRA9TVsSAnZWagAAZ7gQAIG7iOYK7jKb6eM+hEUu\nwgXCAemOu16JmRm133Go+avKOgBrUdA0fNJha5fD8rt8DZ3ImKUtnhFI9eAS\nPgf0KpwZ5Oqc5tZCI7z/QMrttkKRuRL/hnkvG7YjnNVMh4H1GnhjVZlq8a2y\nJbP9qY8yfViTfJuHqbj+Bz0yMNGs93v7I8suNlIRGQ4qTEii0KNdO8bJVkSW\nG6mPpxP+Mnp/6bdWFHmMek0dwHMLI26pvcYP3LjJ5uePqs7/v003CajKa/qV\nGtVqAGXt3eD2gJPPnWS5l660d7YZpU1KnG/0mNdXQzT885h+kt7PY5m+RDy+\nLECrl36S0QMCqPF9WDWxAogjbrdgulrK4Ccy+i9ZAceJtDyuNJm1nCRBGzq2\nM/2vHJkhWS2AQohTQwmw229kiBbrZevY5uVzXWlwQDyWwYHaHDjAFZvRvkI/\nUCr7t6YuyuON31tvOG0Yh0JUvXthNwvr/fkh1gam0Qu21xQ2j17J2pcRW3nx\n2hm58EFPSH6Md6edoYA2nm0EfLIHE0HLALxAHEocmzC+S6TQ4Q07d6tpoCnQ\n4BY9/kkZhXm1wwAkxKNQxgZnqlHA9g/gLK3tly2DVi8exyc9Iu/5/Te1Jb49\n7altW1IorAGhQIQU5IR0MpOhBJibCkmFiYnjcSU/iwqz4redmpV7c6vkrdpZ\nty7E\r\n=EdmX\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"cec9d334021eb23f0fd60ef8d8a43a243791fa23","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.20.2/node@v12.17.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.17.0","dependencies":{"react":"^16.11.0","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.61.0","@brandingbrand/fsnetwork":"^9.6.2","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^9.6.2","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_9.6.2_1595955411187_0.7801321692008747","host":"s3://npm-registry-packages"}},"10.0.0-alpha.0":{"name":"@brandingbrand/fsengage","version":"10.0.0-alpha.0","license":"MIT","_id":"@brandingbrand/fsengage@10.0.0-alpha.0","maintainers":[{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"alex_npm_acct","email":"yixiaozhouchen@hotmail.com"},{"name":"alvaroloss","email":"alvaro.lossada.1992@gmail.com"},{"name":"andretodman","email":"oinsighto@mac.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bhushankini","email":"bhushan.kini@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"jhuerkamp","email":"jhuerkamp@gmail.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"}],"dist":{"shasum":"2d303cd37de2dd865fb9d1a22196740772dddf22","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.0.0-alpha.0.tgz","fileCount":162,"integrity":"sha512-DhJN1h2T+mEm6c7FVNDLU1a8AYNP3pMZzw5qi6i3uzF+2+tsFugrqzA/rbUX4dIga0g0bxfDdMb0ZwdolVQA/w==","signatures":[{"sig":"MEQCIHfLwk+CovGka4kHKEvvrpAMl0BY3ENUwUDOGF33dHsqAiAhxYEpF11JceDdbttgWJRKMc3RH34Hks2U3O5Ri5hWKw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":402141,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfLECqCRA9TVsSAnZWagAA55MP/RMzRBUTkjiI6vT6MfI8\nQFHgwUMS4vlyaK+UfeZErbD48bhEfXxdMpwe5CfVTJ8llJXFifLNxTE+QbaK\n/kuAiC1KXIUm0DDozDtmNl8SoNULzgbwAzY8u8QLfiGXAYFLCbmsBb6goN/I\nza79dx30Pk5mQPOnOigctKFJpAzMJ/c3/UFGZYz5p371bFni0vxaqmW4zmkp\n+gGEiYmUGQBpcrrcltoD9krZReGNVEZ+p78C/h9MnwlwDmyJrP/zRmgPURgl\n0kOBQr6dQ+5333KzVFunJRHJUKoP0J7G7+g+PAZn/VPLmV03MKTMVJHmeua4\nJGVZ5Qjq95hfgHkQ07lYMBwZx9dQbhjSQzsfvJZ3MoozOwc5z7fjCNwXJD1H\nCRumjsSMAUT4ecjeejhTYo3RumhYWcVGQiJ3J+owKcABXrOTaD6A0d63d3KI\nagz4Gbgk49DFVO/mxwX/PyOa0+ybunQ+PFN6uf/0T6shMr5nqv+GpG35GZ0K\nnpVx19j92UBiDqEumNfI3X4Q7yuryvgiRRREBkDg+gojizCZfh5x2x4Kfnl0\nCWlb4j0kFdIPP8wWRdaqQix+47RQ/e5GLit3AGmb8Met/3cs1IVplfKAKnKV\nExGqDJQ3r+d1VkzMkIZqlcbpn17unXi3uB16B76csTLikgBf1YJst3czY+z+\nlcXo\r\n=XzGs\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"4d0e3a27867120f22c1eb92c6f1a1a46812bd734","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.20.2/node@v12.17.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.17.0","dependencies":{"react":"^16.11.0","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.61.0","@brandingbrand/fsnetwork":"^10.0.0-alpha.0","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^10.0.0-alpha.0","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.0.0-alpha.0_1596735657532_0.21364918016944023","host":"s3://npm-registry-packages"}},"10.0.0-alpha.1":{"name":"@brandingbrand/fsengage","version":"10.0.0-alpha.1","license":"MIT","_id":"@brandingbrand/fsengage@10.0.0-alpha.1","maintainers":[{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"alex_npm_acct","email":"yixiaozhouchen@hotmail.com"},{"name":"alvaroloss","email":"alvaro.lossada.1992@gmail.com"},{"name":"andretodman","email":"oinsighto@mac.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bhushankini","email":"bhushan.kini@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jbancroft","email":"joshabancroft@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"jhuerkamp","email":"jhuerkamp@gmail.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"vance.hu","email":"vance.hu@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"}],"dist":{"shasum":"c771228b65f754232cfeb9988563c28590bdf9e2","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.0.0-alpha.1.tgz","fileCount":162,"integrity":"sha512-g70goOOlX16FKjeTrSGsKzui+XJYpU4RVF5baSkQMrguOspGyoOJuR4L8w1NbddncuFP8xi3y0XZWwkjZvtReg==","signatures":[{"sig":"MEUCIAd5SzDEGRrrdjJgpDeUGtBeaRf+uzhWIZ7/Z7hhjSgVAiEAu9GZe+AtCcktzj36ohd1LWItayFtegB5v6HipurEc50=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":402328,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfNZH5CRA9TVsSAnZWagAA1tcP/RYOT29gxh1cba47pt4G\nXhw5bqF0VidOp5JjKnrRKxTlBRh+Y1pFmB1qpu3CBYe/7m9NhGygz0v5S7fa\nJ6/md0UPui5MkEatMt/53JH/byqkL0J5oCOmgdAFGhVtcL3IBGSRXhfNv2V7\n9t1zqVIzZdzZ3AIXO+jazeyRUxXq9Ydub8aaQgxoz0l+KStB48uJhPFiK6Ai\nSaMR2vajF94IWQ6D3QAkWBCmGko/d1KJT+vndWZz9wM2Udu1l6jNJHRBV1hb\nDHih1KlmM3DrslPIGgb+v+qfPqYGDalRyB4kEzQJFteCu9aGGT+nz0hmKAAt\nvFuW5WSEGWdO3iFRk5YWyu3iAArdkgxBB+dDdeK/3DcN97XXRkKjSxO9eIP2\n0eqrR62o7g0m0B32nj1biG5r/UF0GmSkgFKJ1irfW5I1XghbkpA8JGecKYQV\nESByLf3RNKnLXzRvBdgxAA7t1cMbaQLXoecCYmOJZD8X2ymoQDtL+zI0ouH9\n+j2jiTpYmJPj5vhg1jhlmSkpC987S17FcmVDcqr0U7sUJA+l2TmpnuVk/RrB\nBxof+5Cgu776md0dlCPamKI+f3VYQHfLkZOHGLXqVq+JDciwistpYCSrr67q\niQD1MIkYzioYdsAOUMb6SyhPsTf3Gmc9nWEZk4Ghc9KowoSR82dZNNVhnex8\nE/z2\r\n=gnfX\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"accf9bbe735ac03986de92a8bcf0ae4b15feee30","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.20.2/node@v12.17.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.17.0","dependencies":{"react":"^16.11.0","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.61.0","@brandingbrand/fsnetwork":"^10.0.0-alpha.1","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^10.0.0-alpha.1","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.0.0-alpha.1_1597346297196_0.0002806296834192423","host":"s3://npm-registry-packages"}},"9.6.3":{"name":"@brandingbrand/fsengage","version":"9.6.3","license":"MIT","_id":"@brandingbrand/fsengage@9.6.3","maintainers":[{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"alex_npm_acct","email":"yixiaozhouchen@hotmail.com"},{"name":"alvaroloss","email":"alvaro.lossada.1992@gmail.com"},{"name":"andretodman","email":"oinsighto@mac.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bhushankini","email":"bhushan.kini@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jbancroft","email":"joshabancroft@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"jhuerkamp","email":"jhuerkamp@gmail.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"}],"dist":{"shasum":"8b5f622ef7c489b2b241d0648c58a30890467d47","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-9.6.3.tgz","fileCount":162,"integrity":"sha512-Euxzul0EgWLcEVhYrZWvs/MDlNmHn1leAkq6lLUfLLtP01ZwMNKebt7xQmM9yljxpl0lBqZmgPaQt8oyS9fvQA==","signatures":[{"sig":"MEUCIChH3jkDUsQolhh3F9pyHJjwwHsvSzA051LHQ4Rp1pbHAiEAjQxRQYVrvxdqEwqKBCGG0oMZ2vuNmBTXghwl9bnQmZg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":402222,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfRYeeCRA9TVsSAnZWagAAdrUP/AniFt1Fg3WQkF699FTB\nirKvtSuRf+dqC+zNdfgYs0g0MXQ3XIUXzYfW7vKj7Ie+XVSZhrSypjJR8Lz+\nTXM9QQVyeT/1EltYqMWMVLo6JZSXgu4UircbU5WCyr92BPxuuUkA0/A0b9Ca\nfWFFmbtvzCpMeJ0UTpetN8aw91l53fDaCbZa5PVFVx8i4LSe5hy1WSeDJvKo\nAh54IHXxoyztbFMIW7jX+oYyr86KgNbqXcS5Xf/rgpps2ifhX+hu4rGkDbeo\noMLC/pgmQkXVZ7BMdkLQpay6UCEPDfVY3FXt9D+4EPghYzEHQVQtl8aSrhiw\nWql2MiuShBnQ3knD/hBuYe8i3CtvwGAAHUlFVcVrrqMsc/MHtwo2/n4zZHBj\nKFmHQ3nyvc50rexjzcszJrZE2Ee+w63WWywgl33ydzbxxFlkECEcqcxTy6g0\nUlkhSf008e8Wnd2b+WO4AmoygDRwLx2sQI0HDVs2iCejxRUC7SKBRg1rL3Df\njKY/rkyTmoEo0aORDmdFMQL6hhSiYrNg5CpJoqOd2gdl8l1jGvxLPcZ6RmSz\nPWNJZk9veRUdekkOPY+CbJ++soILEApTl3ADIpdGKxMDoZFe6gnM9ZaSLUXT\nKlN4nkGTHJrdDN3TEfaZ5J3P7pgNF2yr+ZavmmGcfrfXNm2JXMGuejuQUJcX\niz2Y\r\n=CMn2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"bb257854f76b9b6178d1c490edf204bcdb2b9dc6","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.20.2/node@v12.17.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.17.0","dependencies":{"react":"^16.11.0","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.61.0","@brandingbrand/fsnetwork":"^9.6.3","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^9.6.3","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_9.6.3_1598392221401_0.5347984490114095","host":"s3://npm-registry-packages"}},"10.0.0-alpha.2":{"name":"@brandingbrand/fsengage","version":"10.0.0-alpha.2","license":"MIT","_id":"@brandingbrand/fsengage@10.0.0-alpha.2","maintainers":[{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"alex_npm_acct","email":"yixiaozhouchen@hotmail.com"},{"name":"alvaroloss","email":"alvaro.lossada.1992@gmail.com"},{"name":"andretodman","email":"oinsighto@mac.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"bhushankini","email":"bhushan.kini@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"jbancroft","email":"joshabancroft@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"jhuerkamp","email":"jhuerkamp@gmail.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"lamine.sadoun","email":"lamine.sadoun@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"}],"dist":{"shasum":"ad9cf80fc583f1c1509497e2898510fa21b2c14c","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.0.0-alpha.2.tgz","fileCount":162,"integrity":"sha512-ny+0hyNX1JPW555mZy1pqoEUOoNjFfsaEhsGPjGF/++KjFUpAUuwpYQ7BiP5LJFGhns/8qBawrsWLvk0aDsSIg==","signatures":[{"sig":"MEUCIBlVE3mC2fHgBneiOOUrgMnGyAtpdKQ9clHEcQDpIAFWAiEAlCe8rzycfwl2LUbgKqGe9k8IFM9vTvkvXfo9oBtJWDA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":402515,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUS7UCRA9TVsSAnZWagAAVfsP+wUXoJ7VUTQCyZ+LVVuC\neaWHOgr9uPs6r9pwdZcC7IurJrJLq2lSkWAGm0czfNVWLmVQC06ctJIoP1Iz\nXUNuqorniwDjNFQIeYigdetOHBGgPns6tDC+Fm6HUHDrO1VIQssX+05FObTU\n4F6WG7ChlQhJozHzYlue1vOm7Ds3XUyIB6jEz7nJ4JEAu64FEG0SV8lm+896\n99a++k9wi5M9EHnBnhFKNAdMx/d2H0KzHlhtPCF3piyFXJ9oyzANvkqqI8nW\nGILuFGu+uwQ6ytC1NcGXQ1BjSh1FktJw5DW4fsP+Rut/yEO8zOgAaD1guyqf\nf0ULo7625oMCbdtBwHvs5DK0EdMIt+IH+U2N16TC7gXSCdpq/zzO+27Ra8cc\nbYI3XhmsZUDIT9vM902XXh4yH4bqrFAeIKHKLmTPKGGty5fHbSSUdH+k6CTZ\na05W/gao9WvWggavZnJzsIaCKV/P87GMyuFg/Sn5dVdfCs6afOV8UzO8+lcX\nF4D+LO92H4L7WhHRuqJ1sn13sI9OOnPGaNP69St2HZsgtpU40aPAzpvWxrLQ\n2vAXomCLrn/M7GoQUJlWct636IfJ/41i8BnlLv1GrXuV9LHkoJKNhrI3dYmQ\nZrpLhd7hZcNFvEyQK6EfHokUeNLCW9vgNecdPCcmT0gzLqNhJlHTgN+1dnlp\np98O\r\n=+yS9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"21307053e4cff7a4c224ce1d749bb53370b6ec37","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.20.2/node@v12.17.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.17.0","dependencies":{"react":"^16.11.0","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.61.0","@brandingbrand/fsnetwork":"^10.0.0-alpha.2","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^10.0.0-alpha.2","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.0.0-alpha.2_1599155923991_0.5427397010063051","host":"s3://npm-registry-packages"}},"9.6.4":{"name":"@brandingbrand/fsengage","version":"9.6.4","license":"MIT","_id":"@brandingbrand/fsengage@9.6.4","maintainers":[{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"jbancroft","email":"joshabancroft@gmail.com"},{"name":"alvaroloss","email":"alvaro.lossada.1992@gmail.com"},{"name":"bhushankini","email":"bhushan.kini@gmail.com"},{"name":"jhuerkamp","email":"jhuerkamp@gmail.com"},{"name":"andretodman","email":"oinsighto@mac.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"}],"dist":{"shasum":"9c0aacdd17dcf2fd011dd09cb24501aa3ecbe03d","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-9.6.4.tgz","fileCount":162,"integrity":"sha512-ncCXHB4z4a1syZk+PM1icpFAi2IxF9xlTrpU1H3ri1IaV2FqnQNIZrwE2jBHOR4UM3+3pIlFNkTdNhOQLysddQ==","signatures":[{"sig":"MEYCIQCPzBtSLU17asHyqFfpIz8BsZKtKcZOoPsKszp1vo+GlAIhAMzlAWGQWAaHuw7EojqTbX/FRVMSVunA78rWQcl/JNQU","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":402383,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWQS0CRA9TVsSAnZWagAAVFIP/i1sUxmns9Puk5F0hy9O\noVqpv7VK0t+eseHvDJot5jleTPDvHD6whDZfIObmkfm2ZpMR3IcTW5kjhc8o\nZdI9tcn4t7pfk+v1wGurxO7FaW043VYNDR8lD9y5on7AKH3IjswUoqloUsar\nfrhv5bus0I1RcdKsWZwYT9XLaFy1CLeSbZkyBiRZWhDyA94C/WJqz1arzpCv\nTq0Hbj/Gs9P5Gosu7o1pdhcCoN8NK2RxyRAvcjb+Zej3ryC6lM+cltou0TIK\nzN+upgehzOBSj3/4ipnJoxFybVSfhBkVqppW6qAFSGLx572wEFIsvIlZVw68\nANbsjQ9UDqhZoItGkTNUklPN3/XfE4lgxLcUR4azHHPWWD12VBQH6TP4EsGw\n03tCzwcQauOzVY0gsGk1yZnboK7QNknQ7PijWwOEWj8Ur/WFXTFFL0trN1/w\nopEk0OBZNg9ULy3pjPQAN9Gm32HX8qdAYGTfPVzSn/Tz0mZFCZRluvSo5lyC\nuSoRLa77nzxYpAd4Yt17lLP6Gv8obaCB8cXUXlx3zldUe9yf2nGrzGGcZg7l\n2eU78TfnVZtBiKttCNiwjGQRStY3TRIsa0WsV7HhbUq6TFT8I4XpdPFvUL74\nLOw+hMq5+2RhQeO4MTIZ7Dryi488RBQpcMQHkPfoG1tk4BUOFtZK7/sZnlNo\nQw4+\r\n=InFz\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"3ae7d2af9cd41d2353fb2ee55d0db248796a128b","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.20.2/node@v12.17.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.17.0","dependencies":{"react":"^16.11.0","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.61.0","@brandingbrand/fsnetwork":"^9.6.4","react-native-permissions":"~1.1.1","@brandingbrand/fsfoundation":"^9.6.4","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_9.6.4_1599669427723_0.4102271177191017","host":"s3://npm-registry-packages"}},"10.0.0-alpha.3":{"name":"@brandingbrand/fsengage","version":"10.0.0-alpha.3","license":"MIT","_id":"@brandingbrand/fsengage@10.0.0-alpha.3","maintainers":[{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"jbancroft","email":"joshabancroft@gmail.com"},{"name":"alvaroloss","email":"alvaro.lossada.1992@gmail.com"},{"name":"bhushankini","email":"bhushan.kini@gmail.com"},{"name":"jhuerkamp","email":"jhuerkamp@gmail.com"},{"name":"andretodman","email":"oinsighto@mac.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"}],"dist":{"shasum":"3df36ac12f5e3b2b3b8b2046cf353797f8e77bb7","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.0.0-alpha.3.tgz","fileCount":162,"integrity":"sha512-xWIWWL4FvhheT0lafzeK7PB08V+n0ES9dpIPIZPZAh7r/SqLMoy+CCeUDsPoN1tIvhw8gyUBoFXDKmqBDo8wTQ==","signatures":[{"sig":"MEUCIQDrw8XZe8JXD1xN6Och7UiuQVVmwS0bwbsA1M6xQseB9QIgCUL1Jir+vgngwaWG7l8AE1RUDdXx0oe/gaKTM5lyAo8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":404540,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfa2/MCRA9TVsSAnZWagAAPv4P/jPvzmF62WIVLgDnS373\nVfRB3Y6bUx531KYPnCF1buzzZbqF1dmA3b2KxniJd3ANbzF61mxifw6oMc80\nujJxVcus7JndE2SAYB7PzD1axF5tYA8t+SefUNPbV8Xs3+tn23iNKxpdF4EO\nA7Gr3Ch6yU2gq8WBNf2X8yoygTGDNWyUai3coMPGsZibJhAAVxjnAGiwrmVY\nF+p8+YDZF6wJI5kMJSUfQhn74H06vpT7Nd2gqBNeW6bTsEY+ONMOoEMsjYey\nbmx22LW7v8FnBBHlnFnPkdCzUCI/Z7X7fiV/U9ZkKNjDlR+CI3uDhp3vtCU1\nb8w5XT3g5rHiuoMYg2jXVw6xMtym0LqBJ5QNPfmXS4bAZ12obP2jWuIbdELK\nM4DlMjiRRbemy7lSeY866Rqu45jQBVpQDahH+MRvo3GMXNEMjjNCutQwXyW3\ncnP9qvVifOJjvMm5AT99W06AlcoPGtabpCwOJscyX99ULFefota4Lp/TtL2a\nusNums7/Io9L16nejzH0Wfag0DBqAFzfVDXoXohHOlAhPSBLbyMXhK+jNnCm\nw2YE+4kYtgOr0lDhFK45DopIwRp6zBKfZi5AzsXrYO0r5M+X+OxFPQDTAdMu\ns5KW2T3g8nt7jTm/12S67wfgsexA3zzRPXhr5gggQalgPNjmaLsA4Q4YQx1h\nnYiW\r\n=DJWb\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"8f04f40fe6aaa733a28f56026101c29e7c3b1bbf","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.20.2/node@v12.17.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.17.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.0.0-alpha.3","react-native-permissions":"^2.2.0","@brandingbrand/fsfoundation":"^10.0.0-alpha.3","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.0.0-alpha.3_1600876492143_0.3232977358208504","host":"s3://npm-registry-packages"}},"10.0.0-alpha.4":{"name":"@brandingbrand/fsengage","version":"10.0.0-alpha.4","license":"MIT","_id":"@brandingbrand/fsengage@10.0.0-alpha.4","maintainers":[{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"jbancroft","email":"joshabancroft@gmail.com"},{"name":"alvaroloss","email":"alvaro.lossada.1992@gmail.com"},{"name":"bhushankini","email":"bhushan.kini@gmail.com"},{"name":"jhuerkamp","email":"jhuerkamp@gmail.com"},{"name":"andretodman","email":"oinsighto@mac.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"}],"dist":{"shasum":"10759f88ed38c13588ce3c8c45833d64fc49a6b5","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.0.0-alpha.4.tgz","fileCount":162,"integrity":"sha512-ODtAajBz+phaV6ESQKDNwI5uXgtYSsH8HWRiszG8zQbf1zs9fnOlCUgP6uPmqOgMyBzeWOTqhBVtPJ51vpPiLA==","signatures":[{"sig":"MEUCIQDkbQIVQUG/tp6rzHNymK0uLA2FlnvtwHyTxrn7lG8aBgIgNbkUfPTT78wIaOhdUZnHOZWLDvjteMHtaAE47s71KQY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":404727,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbOFrCRA9TVsSAnZWagAAbzoQAJvsjmnBN0otrBBDvmua\nV9o/rr7YiQbbYSoR/ofn03QncNZ6noAYJ3YnmIPvP1ihLusRwBe+hAmR1Crf\n6zG8hIzFQVYLWr40a9obVsUM4nAn/yhNVmhOOGL9ZaLmLUZBZwxyp3/fpTgg\nI+67PR9bOOL7M+FvV+RvSY3FO1plW3rZRdWvnxJ2ZSxGTgkEXUClkKqScOHS\nUemTc9gqDSq7cYs051+hA6OmJBmB7i5nlrx74P59uZPZxeF43MOiyW9ZMA4A\np3FWBHqzFUeg32pHnA6KFhaFkm6WQ4z+4ES1RJFQFxehacJJp8IFlGLuO1Qc\n1h8eO+VgI+B7MAE4rxN1uNcfmycE2PxMhMFliH4HaFNcsHAeWMPrAn36BwaQ\nSCY8H3/RRtiNEtyrZ2ubpx2pAhbRx8AyCCexcwyyJ86UTXczLEKdMRctgA6s\nhEbKCs+KVkkaAxDVH/GRFrzhUvWOdZha6mv5MqQN2TLk8+L6cFiXH1dSLmlw\nbtnwSQNVaPkHFBoqfoAC2Wryt++InlMt3DXCmg1sn2muRNgBs0sQq7JxcmT2\ne3Op8VBfpWQcRCsXbDBYULmGajTDi0tVSGqv3q5NaoO4CEfvjK1ZBiJbXTpS\n9M5JwZPEF8jX8h4dXR7SuGbRduB4//ZzT2f32jdoJ59cGz0J4gmirQQ3PbWp\nmOy3\r\n=19+Q\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"a634a464745ac67afa420f5c7315419bd96f155c","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.20.2/node@v12.17.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.17.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.0.0-alpha.4","react-native-permissions":"^2.2.0","@brandingbrand/fsfoundation":"^10.0.0-alpha.4","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.0.0-alpha.4_1600971114756_0.3984147662890334","host":"s3://npm-registry-packages"}},"10.0.0-alpha.5":{"name":"@brandingbrand/fsengage","version":"10.0.0-alpha.5","license":"MIT","_id":"@brandingbrand/fsengage@10.0.0-alpha.5","maintainers":[{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"jbancroft","email":"joshabancroft@gmail.com"},{"name":"alvaroloss","email":"alvaro.lossada.1992@gmail.com"},{"name":"bhushankini","email":"bhushan.kini@gmail.com"},{"name":"jhuerkamp","email":"jhuerkamp@gmail.com"},{"name":"andretodman","email":"oinsighto@mac.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"}],"dist":{"shasum":"78d1656899b8e8a5de54b55e895fa5ea18436f1f","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.0.0-alpha.5.tgz","fileCount":162,"integrity":"sha512-CxdCPwOM8rj8EuQlNDI6yr9uSwoNW8Nm0lNlr3nN8Ll77SYlnof7U+TzZukk6tB8NBr4xnBNG/FTzfzLubtY4g==","signatures":[{"sig":"MEQCIH0QBfiYa6EA4vlLtgIZ0EXoazkcrLfkt153aSNDqfw9AiBTnfTNRbeOHT8RPORkK44Glh1fsqume705ZvTbjmIHSA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":407368,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbj9/CRA9TVsSAnZWagAAWAEP/RokjE+wLGdHntJZK281\n2xHs5Q5+hVEe1bvSXJVNIHuQCWosgugYyOuw482Cua2LdYZIeviVU7uJpGAU\nqC9BgB0pCVvelv0aAPSMz9j+ZSmtlVzS/tAklQbEN5b6EWH9FTUoiS2nGWrn\nWUi+zdtK5g5MlL8mhkeeqC65L5iZPJ5e/1g761Cr6IEGKPjedTMMThocc3qS\n2N3qmGl59XbEe5yFyn/r9Y5u2TcN8KPiMEg4nKMO96OZdAvdMUSeLIuKpl7s\n8yOnIWWZNo9mkZ1S5SPi22fNIveu0MTqH4uYY14eFcN/Mk5WDg4sIF2ea2Sq\nR501EVe92gO6DdEFK5NBWl37W4KyKObCW0OttFom4NI0fF+z2COHzdzFkE02\n2drySo/Er70i/5UgSprvspUwWWevnS2Asm56y9irbehf7LnvtzK8Ql2hFjZo\nZNGpFKSLj50lUCErGSwW5Xptlu3GzHe8+ZjUEqU8EARjZpRTpTHoB0cuWEck\n0rKPyGrjXNWi5e5jTNXHomM8B31WcgPqtanO6cOD9Di1uDzZGlpbOsmXtG+P\nfat6JA2BcAoDYUnzUYzkt2AO9WSrbGy2m/l6PZRnGp82b/zZa5KdZmPiJttT\nVj5fe+5sQjOjRp+PzYvGq0flePkgOvpAGMpgXoY26NXHUYt1QrKhaCKRvr8i\nM25h\r\n=1w6A\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"a0021674d1c864642eb873adef079316880fb068","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.20.2/node@v12.17.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.17.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.0.0-alpha.5","@brandingbrand/fsfoundation":"^10.0.0-alpha.5","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.0.0-alpha.5_1601060735227_0.6838251377454052","host":"s3://npm-registry-packages"}},"10.0.0-alpha.6":{"name":"@brandingbrand/fsengage","version":"10.0.0-alpha.6","license":"MIT","_id":"@brandingbrand/fsengage@10.0.0-alpha.6","maintainers":[{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"jbancroft","email":"joshabancroft@gmail.com"},{"name":"alvaroloss","email":"alvaro.lossada.1992@gmail.com"},{"name":"bhushankini","email":"bhushan.kini@gmail.com"},{"name":"jhuerkamp","email":"jhuerkamp@gmail.com"},{"name":"andretodman","email":"oinsighto@mac.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"}],"dist":{"shasum":"684a98f7044d8223373e3f1e8bb50025efac1ce2","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.0.0-alpha.6.tgz","fileCount":162,"integrity":"sha512-p/B++u7c+r8rg5bK7YQny1lUjd8Q7YfYuP6vKxgBXjVpmbdPpi936w2Tr/eR/3N4obBeKqdCUrn6lc8t0rXYyw==","signatures":[{"sig":"MEUCIBT4yUepayLN5rJrvdA6Mx80OLPumcx1G25MIs49QzHQAiEAtD+CBO1U3IxBsqHeGM+5IyXzCkiwvG208L23C/mx3K8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":407555,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffITHCRA9TVsSAnZWagAAiqgP/RvwJiDhujG2SPSyvOd/\nZ9Ap/omZCoomvJJKHuUYHzK89wZJ1YT6sWzeA7ymeR8fMQhYaCOmiXhQvwAR\nByR+fZNaI2jbtxoXBxtoIuCdkhCYDAZfBjPfzUs2T/4IjtT0OPL9dMuVYMph\nJCZKJmDCJ/N7UurqQgYWyvAkvZaYRW166JTH3TZ6MbJJAV6I2AeLdsujXlYa\nAdC8RkkUSf3aqX6BMzXib1ctYYN9ftJj2pb3JWPqn41wk+u7BmNiOaSiUhoN\nWOS3MGVjuP8YJL5G83PVTJ1EgMWgUwjwevkFsxA+yB3D9Irc6+G+3NSKCxqL\na3zDPSzpm7flvJoE3JAOEtYNcaXxbI8KNwC1H7YBknIN6S5S3G2r5yr1NBff\n0wHg4QbnhdzqIzdS+G52xyb3yNuBdTTw6gQiTucTRn0xswXGtZBnUQ1NSia3\nXYO0negC+z5C0UPLvxu4t3hmTW2INI4zXg2IY39E28aJ2ZUGhYt/TFZubfMq\nOf+MBdly2B9nvy4SMiphIFmlX7nW74fEfAMQJ56LUNartpaNDxD/SAQKY9K7\nkC2v/2XsFerbq3WFLYxw80hbf/MBlAFefbzXIC5VdeXR72jEd+kZD6hU3hV4\nMGrdberY3L6PCGXUa/oxsCVnv7yJrfTioymnbdE8c3o6QwNa9Ci7twk3MYIE\nrAyJ\r\n=nmss\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"9f2d140e2fab37af971eebc66eeb098fca28cf83","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.20.2/node@v12.17.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.17.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.0.0-alpha.6","@brandingbrand/fsfoundation":"^10.0.0-alpha.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.0.0-alpha.6_1601995974549_0.6215921498729811","host":"s3://npm-registry-packages"}},"10.0.0-alpha.7":{"name":"@brandingbrand/fsengage","version":"10.0.0-alpha.7","license":"MIT","_id":"@brandingbrand/fsengage@10.0.0-alpha.7","maintainers":[{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"jbancroft","email":"joshabancroft@gmail.com"},{"name":"alvaroloss","email":"alvaro.lossada.1992@gmail.com"},{"name":"bhushankini","email":"bhushan.kini@gmail.com"},{"name":"jhuerkamp","email":"jhuerkamp@gmail.com"},{"name":"andretodman","email":"oinsighto@mac.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"}],"dist":{"shasum":"3c4bc0425753bb134ff1fb9688b431c058b603ac","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.0.0-alpha.7.tgz","fileCount":162,"integrity":"sha512-r9fUuQKzGH++8+CHTFyjG5ea+qc+UUX7ZcWYVgn3jFXtB7p7XkcoKx5wQas5WExHkjqArCugJAV3ROfNYhR3FQ==","signatures":[{"sig":"MEQCIDYZIYhcJzIPnCSKYQc4tRTNCuHHu/NoA6KY5XSZxtWGAiBDJkF47Gmb9WYvSt8GCUQ9+SKS6PWmHA//eYV2gutuaA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":411214,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffNaYCRA9TVsSAnZWagAA2Q4P/3ll2IMN1zj0+xmmAWNw\nmztSCTQTStpYvdC2DsbdMpGB4+lIwUdggKuREMZkAusOzd5C5xcB/vCocjVj\n0tGVN4Ml7329I/D7lFm1qTKmM+zX7wZ5MZCbkXFvabDrPBI0L2IXeom1gzGB\nWpGtzRMR9bjwvpdTDeOHTrsjoILLtakjII+AZ4p8MUu/fF7xMVSQ9FID8lww\nEaMpTuH2jbHperCEn2mfstRHdvB3OYTwHxVOumYO2oPVdW38KUOpC0ew9IGo\na0yKGqyNw9qae2jHBf4gnd+Q8Wov5zJ3iyy5fiurcH9zCLS8GTL6EEd2aoNH\nyMMYy9AfIWn/R0/XTKC/odATr1lRJ+X4RLAqmXBuek+u8HQC6T8TGOqvaeUN\nbdA0BAX2Xihq6gKMeddnoRWFD6/HS4VGvsi4eZrttzRG9aI7wxDpf0kNbecD\ndxee4pEyuHmnkIhipUYn0nYqPMn8usPNxKTkDhzWlGHQSG2oMoLtkqNADihR\nUc5r9iFWHUYhx2qUEXreb8QBjK4RUDbgA0hapjrLuA9US1nPGN2AIl08gdT+\n/7HF3H8WzXwSG5vt6d3gKiHXW4++40dSp6tBs7ARtiCvMfBQV1LjDtKPWUNX\nsm/LSJX05CuE6O66QyuRcZ/uWK07YfgIF8AXM0FRwehyLOTzOWQ8wfMmgGXp\nCRDh\r\n=USaa\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"5ccdae1db30b13042fe502d4eeec24250ef00456","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.20.2/node@v12.17.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.17.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.0.0-alpha.7","@brandingbrand/fsfoundation":"^10.0.0-alpha.7","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.0.0-alpha.7_1602016919606_0.47656944488296626","host":"s3://npm-registry-packages"}},"10.0.0-alpha.8":{"name":"@brandingbrand/fsengage","version":"10.0.0-alpha.8","license":"MIT","_id":"@brandingbrand/fsengage@10.0.0-alpha.8","maintainers":[{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"jbancroft","email":"joshabancroft@gmail.com"},{"name":"alvaroloss","email":"alvaro.lossada.1992@gmail.com"},{"name":"bhushankini","email":"bhushan.kini@gmail.com"},{"name":"jhuerkamp","email":"jhuerkamp@gmail.com"},{"name":"andretodman","email":"oinsighto@mac.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"}],"dist":{"shasum":"56edcf9b933d75afa0fb282dca2881f044939ed9","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.0.0-alpha.8.tgz","fileCount":162,"integrity":"sha512-qWq4gK/duoTRBpOw873783/FEzZXnVGzr5GNrj0VB8jKXgASYFQ/8tfw37GaNfHVp2CYNz/3zgJqIyk9erJ4kw==","signatures":[{"sig":"MEUCIFYK0mRRjC8nUvSzAe8fAqHV9iFmuYOIVmkSfKq72HHsAiEAgZLDjluQi6IngrJbiBkYaxSG+yQQAOus6VYRZ4jZ8hk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":411401,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffeKCCRA9TVsSAnZWagAAU8MP/0bxPLLWO7SCit2IjUcx\np5/nv76kU5PJx0DNMENU+dNh5Vb1CqJAPlQH5YlES1wi00Zl9KJk/14Gj70r\nyaZsrqtikUBXRsi9DDhihkrVdGdsC+X+eJITDqA27+zCxkl7/rosj9bgFBDv\nnAb8dBAqR6UyuGZU9rdckSYjmd2P/eV+LgFUPbovOnyQSfNpAVGoBuSdg9mv\ntJzwp66VlywXEDeCPM5BB/A0+ghcV98ybJKzWKjeJersqNmU2n1rnu+xU+GR\nJxC+JRv23YAMH7vQiHjccbyhuoMGrrghfQ7dxu7GgMff6L1bYo1UJv31HXYw\nwjzZsIZahkz4RPxG7hxZIxJxd8yjvldS9qHAXBHMlwdMwXR1C62vNqTeLDFi\nN66BLwHXBXfYwJH2XKvrONLc90Mmjs88BTenzi7Zx1Wlnvk86vUU+IBxmZrM\niTgyJ8fQ7X8W224NYiO/25oJEQs0uyfs7WbW0wm0neS0YOh0ZQVgXSHb7m2M\nJZaaushQV8iQT+febpz5XkBJ1hTtFZwMjx/uV6nEcF/h0cn9k0eunl8fr6JF\nwxS3Ib2k3ypS6OiL6Sjb/ny5xKc2nNSxEoNAoc65DyR1quypuFYpRugjFS7j\nO5/HsyYFqj7pUggWSHNaWudg0sirNPOwFKcrmy2avkS1YO5J78+vd4kI/QfN\nx+c5\r\n=NIwZ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"6e5de3dc93f2d3f3b44cbc505e99de1b1118923c","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.20.2/node@v12.17.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.17.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.0.0-alpha.8","@brandingbrand/fsfoundation":"^10.0.0-alpha.8","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.0.0-alpha.8_1602085505999_0.24939333119004115","host":"s3://npm-registry-packages"}},"10.0.0-alpha.9":{"name":"@brandingbrand/fsengage","version":"10.0.0-alpha.9","license":"MIT","_id":"@brandingbrand/fsengage@10.0.0-alpha.9","maintainers":[{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"jbancroft","email":"joshabancroft@gmail.com"},{"name":"alvaroloss","email":"alvaro.lossada.1992@gmail.com"},{"name":"bhushankini","email":"bhushan.kini@gmail.com"},{"name":"jhuerkamp","email":"jhuerkamp@gmail.com"},{"name":"andretodman","email":"oinsighto@mac.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"}],"dist":{"shasum":"af53765241bf0a5918d13b99ce87e54b762d99fa","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.0.0-alpha.9.tgz","fileCount":162,"integrity":"sha512-7IO5aDPyse+iwP10ElysIt+1iNX5PgH9yFwrz99MnatUp2oWrQfFbR8BrlRzjjRAfbNVUCrelSl4w4eLbfSWUQ==","signatures":[{"sig":"MEYCIQCzIj9oyx7nETMDMXNYJQaXRZ3qntqC9X9hrt+fIf9RngIhANHiKu4B8t+oMo/5eu+qOdj32P+F9tXHFUuFanwe4c+F","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":411588,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffg0jCRA9TVsSAnZWagAAv+YP+gMporH2qpc9VluH/3+F\nPHNkWB4t8y1JbJbr2cGzq1M5+SDrOE1as4mO87eCXE0Vkc4uGg//N4XlgrgL\ntWyVVnbUebMd1HeuFgsaKQQbbDhrOa9mxiH70M8MNYz+0yJXOGn5Sa7n2ez9\n3TkB9AdLqMNyaXpsyBAeMT0lFaEw5bYQ7PnFpiA3jBTSGwzy4+KW7KePPBF/\ncjO0K11/mZdghS3ueQPMQCDrezJaWIniXESLhP9CZOt7yk1m9k2FOZLaHojZ\nyA1Us304BymwTjlKQIesRVt9Lg50ZMyhJjUNsjODTwNxXWriv8f1qOGx3JxD\n3K78Eg/d0OWnDn3QAvdS9OmrgEjP3C7KGWT2d3UxeXBYxfJe7I78Btmj2beq\nOhLvl03l9vOoYlrah93cVJLwySPuoKlxYBMPOe3JCRo4jS+eYnb+7t3/YOKZ\nO3jerd+fXk7e2IovxM7gWG/CQs4fY0Gqp2Bxo1HSfo2OG6UuqjiKxJqdwz0w\nw+28OQ6xVC58aJhzwoIxbLpjVo2i4tUZsQk7zwH6NSJWX4VqLiiG3VRjrf+I\n0QZUlL3zzcuY2M6zTcq6A1rtB/PXt9XevQ97tDDBydkyMWUsLF4AUExkHy0y\nFLjRB3VT4yBgG15LT4KmvFyApX6jB3KLr14sCq6nKRLzke93VdZ5swHw0p6D\n2S5A\r\n=iidb\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"13e84a23d894abeeeb294d2a35b48081986cab40","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.20.2/node@v12.17.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.17.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.0.0-alpha.9","@brandingbrand/fsfoundation":"^10.0.0-alpha.9","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.0.0-alpha.9_1602096419121_0.7329096067742438","host":"s3://npm-registry-packages"}},"10.0.0":{"name":"@brandingbrand/fsengage","version":"10.0.0","license":"MIT","_id":"@brandingbrand/fsengage@10.0.0","maintainers":[{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"jbancroft","email":"joshabancroft@gmail.com"},{"name":"alvaroloss","email":"alvaro.lossada.1992@gmail.com"},{"name":"bhushankini","email":"bhushan.kini@gmail.com"},{"name":"jhuerkamp","email":"jhuerkamp@gmail.com"},{"name":"andretodman","email":"oinsighto@mac.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"}],"dist":{"shasum":"2f91112b65db928fb5b29fd4f5fcbccc0152a175","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.0.0.tgz","fileCount":162,"integrity":"sha512-s6wu+er6iY1czHdMs1qahrFcsO2DCsJ6iGGqu6HYE+NcL7fq/3R1msFd2bJn37lwG6wrn2ibPFqhggV+slw48w==","signatures":[{"sig":"MEQCIGb+0EuuDEmsuO5dnzMF+HOV9GnUWQW9RTSBgq4Lu1x5AiAnIbc4FDiPuWKVaeZUlzZ+hMDHphMcMTTWOsbu3eMjWw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":413247,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfhg+xCRA9TVsSAnZWagAAUx8P/1NA3CSEclEwkC3OtOwQ\nnU6m15vusN1lFdXqbzfa4jQVhoemjMALVJPchO+tXJKOEepvgBgDxD1sq0Km\nll/9VqYS0yykPNA1VGQqw44Pyld54iDRRS6JEDJQvItnrMVRZTUwU1k8Xg/Z\nSiCznAdYjVsYZXVvzaGINEMBK4Ri1A5vYhSMrzN3FnWSUt8FEkkh7U8H4Q7G\nntn/Hx6yNBE5qrLGxpt4+/kY4z6QvVx6GokOaEcvu9SEzaxCotdbHdNA9o3J\nqb2LQ+dx61u4m+jppNgqdhng2Esx67rc452jQjX7BnKTsqQq0QT5v5g/qle4\nH4lFR34mT+dgPMXj22Xfc6+4cGRYvbH1JCCAWsPNmYw60nvJO3yliSZ2lqaY\nn9wxnF7PkD+rfxMbv2WmQ9+8T/vzNvnikfOYJqPfs7p9KwbLdb7tsqUwKT9t\nBoHG0/P2HResoUMOmCTCFSY45SNKvDBgvM0VomrKVCO/1ExdXXUnsbsIXlp9\ne/J5PcW4R6Fm0bET0EgrwKKZ2i+/C0cW+gCzBZeEVLhzPU37Zursmvubtjjq\nJ8Benqt19X+EYOylbs2GOGeKht4q7oxlrhPgOakq26OStb7RlJkW4bz/U4LN\nPGpyc0ZPYfNF+nlBbrGnn+RL3K5HCU00Faz3W5BjYG9fgeVjPtp30VWh93fn\nuWl0\r\n=1PUu\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"3f4305220150c9518dc171eb0df3c454172aff1f","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.20.2/node@v12.17.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.17.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.0.0","@brandingbrand/fsfoundation":"^10.0.0","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.0.0_1602621360395_0.9982740930866159","host":"s3://npm-registry-packages"}},"10.1.0":{"name":"@brandingbrand/fsengage","version":"10.1.0","license":"MIT","_id":"@brandingbrand/fsengage@10.1.0","maintainers":[{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"jbancroft","email":"joshabancroft@gmail.com"},{"name":"alvaroloss","email":"alvaro.lossada.1992@gmail.com"},{"name":"bhushankini","email":"bhushan.kini@gmail.com"},{"name":"jhuerkamp","email":"jhuerkamp@gmail.com"},{"name":"andretodman","email":"oinsighto@mac.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"}],"dist":{"shasum":"08ad71be7a022ceb9eadb7c5ca12cf3e00139bdb","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.1.0.tgz","fileCount":162,"integrity":"sha512-4hO4MXjnCm277QA82Vi6Zw060r7OEG6UyCxmXww9bVSJZmHc3L1HcjzO5GhcBGkdii4l23mlpHBUkuRUyh7ZQg==","signatures":[{"sig":"MEUCIBS++GPS/1h6e4oz/ert2A6F/1o1zv1fwywwdGenPTAmAiEA9BpQAm+od8WlqCDUvpDj7lpF1Rcj3iFDrt7LzGF0ANw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":413410,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfkFOgCRA9TVsSAnZWagAA85QP/3qHGgGIR3+8wTEVG47S\nElx8hVoia1Gh/DVtWsukQiue7TqXppeOyuXgIOeal91uff+KwGCCMr51pXtv\n2lxfkLvpxwHje2jSQ++ZzJLte6VvneAsC7nY5DIDBvTXaKLLiX+R/4dE1vpV\nQnb0iQJ+CiYahy5zq4g3xsp+lcBf1HgO00KMCDNuvn/rkxupZT+WM1uhTx1L\nuFqRXVHeF8Bmg0zcQd7wYupTpglbYUB55YA0SDkhR3aM9Gmva1qrRd8wf+tx\ndf/ZXSeXHpZKeIdjuqX1cYqwJCW0HJPL3t3GUiGjtruOpdOziA7nLJY7eoDk\ne2Bhe1gaC2ENOpIx06zFPrs+E7NNx2CHC7rhfJC5JvfpQM+BCXmsiUxrqATT\neqUrrzWDnkTbdQ0fUWCtMuwEDi1avJimDcu8oX4hG50UaKaKt18z/lB4JKxW\nbMcStz8RR/T5BpwqZYmtUovF2eU3Y17axzK1aOSCS2ojwhR4n4SVrvLpyhRk\nrvI0QkEz4zajpXdSlnQqlbpw/f2DdFyNjGeZ1UKAvRN/ojestAwZUkC32xip\niHSqxWlbaSPuUAj38Vh0jD1fTlNHY++Uyh7Jwme5pzBvArIpY8rHUJzVXz2u\nTY+UvcKr7FvgteADjh0+RHM0Qkjbc7l+cXEkDh/pSDFvsSsosxI9OdKEs9YS\ndT9G\r\n=M8/3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"093fc6947bb791d4aceda9ed6b607df9cceae3a7","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.17.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.17.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.1.0","@brandingbrand/fsfoundation":"^10.1.0","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.1.0_1603294112221_0.3545693703313153","host":"s3://npm-registry-packages"}},"10.2.0-alpha.0":{"name":"@brandingbrand/fsengage","version":"10.2.0-alpha.0","license":"MIT","_id":"@brandingbrand/fsengage@10.2.0-alpha.0","maintainers":[{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"jbancroft","email":"joshabancroft@gmail.com"},{"name":"alvaroloss","email":"alvaro.lossada.1992@gmail.com"},{"name":"bhushankini","email":"bhushan.kini@gmail.com"},{"name":"jhuerkamp","email":"jhuerkamp@gmail.com"},{"name":"andretodman","email":"oinsighto@mac.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"}],"dist":{"shasum":"0e90d6b8fc3ce6bd442f7d810c12207ca7bf5de9","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.2.0-alpha.0.tgz","fileCount":162,"integrity":"sha512-7YKxwxpBeoD+9G5/ABXxBVdTGFVhzqWR2Qq/pKCB9PHDa8D3WzmzHN6UHK2O9Qb1utigw8WkB1jbJ2i2siBmsw==","signatures":[{"sig":"MEYCIQDB2a3QuXwImgvfVE6YdETpHG9LWy+QZLDCJFgH2jkYIgIhANZqKmI3N+QTs/Kx9kd4wWvqQttAAS0splBCVZSHwrf4","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":413613,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmZI0CRA9TVsSAnZWagAA5bkP/0tzH/dyk9EYToxrQ192\n7DERuy3cdQC5sQ+W10kyAHtXu17SozXgz+y9k1Rf87BEeGJFAn+AkrZmLpIU\n5WQdsVhMsZfXPwtv9xr3SEtWT7L1aPhEHsxgdU1jiZoXxAxUFCRcehlPTrwv\no11ujYhkAOuLiy+07MXE2DAINHOgGtN2KHk1t1g9Jq8d0vIyyjdsfN/z5iUG\nuxwgkhGQHg7GQCIS+Yt/pCGRnLSZlIaRoCKTlSXGjEmz7rsK5UCijioASTV9\nUXYjYeGZjxpjPEOraHrgCwjWwdeNunNFCB85l/smrPl7uN5NYIaUa56hNGK/\nNtK/x0rBBEFwEnZfJUVa8IlAGTGMM8eoafD+RyqM4JazfuKbmp95ZjmLtBN4\n/RRi7EpB1WeDm23Y0NxvRYynJa2tN1fiVQcJfYN8RTRWhFoep0cEfZVgbmag\n3prKaORBqNUjVXljVg+7bNgcG/O46LHGK5zx+H7m3x+RN5cOdBX6Gogh6GjN\nX3P7En1eH/4bgcuep0kYc3KJmF4ec8pXZWLxxppgzbq//vnHEkMNH+c7oNMb\nDwI30m4TsC1fHqZ59sVRsj1O7N4zBI8ME9SsyYAiDiiOo2oe4+HtqDbLDGoX\nqwcS86m5IHiEpspvxUvf4GFOHUvh+ifRvWxl1vKauilcEFbTtGSz1FWjAfrx\nxYL7\r\n=Y6g7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"148540acef9b4729f51103ebc9bdb9103a45856a","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.17.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.17.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.2.0-alpha.0","@brandingbrand/fsfoundation":"^10.2.0-alpha.0","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.2.0-alpha.0_1603899955369_0.03316327979674405","host":"s3://npm-registry-packages"}},"10.2.0":{"name":"@brandingbrand/fsengage","version":"10.2.0","license":"MIT","_id":"@brandingbrand/fsengage@10.2.0","maintainers":[{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"jbancroft","email":"joshabancroft@gmail.com"},{"name":"alvaroloss","email":"alvaro.lossada.1992@gmail.com"},{"name":"bhushankini","email":"bhushan.kini@gmail.com"},{"name":"jhuerkamp","email":"jhuerkamp@gmail.com"},{"name":"andretodman","email":"oinsighto@mac.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"}],"dist":{"shasum":"ba7352e9b411b918eaff9d63ba5d4076b9de326b","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.2.0.tgz","fileCount":162,"integrity":"sha512-dFePJ0ynWQcnwaHj+wSSO4hN4P3nq7n5bC70Wv9KKkItD958bGHW8M4Kho07kr4UlqkIWlrT0COzO6/6TwB0KA==","signatures":[{"sig":"MEUCIQCCKyFzcMMz0ZJRg8Tgz/Tg9SHjfqJqZ8AhjVmWJHNrygIgDtcwEhleRRkpeJI1tuTCoY6SlmtJRNp1aBnKx/rmUkw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":413760,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmZgaCRA9TVsSAnZWagAA7+8P/1bOMc6qkpWqrtSmSFyk\n5Fes/5RFA+zEm+MshjfWHHOuGzypvWLzvTLcK1PMwSqNDaQtX2egr794ymCU\nwdT5SwTjEIxrQSjkm9bGtypcqTWolfBO2t5itecWASYjPzV/dsxV4KyIQi2b\nvKv0vP2ohVtbNOsDVas1GOOP0gl08g0WH0CkOOx49Pk8XZoviKEE8Iyh9wDR\nkqiCh8PR1R4VmZO08QFVrK+gyDTNAj4zLokYOfk1Hx1OApSXAuyd+jWuTUwF\n4n7WY6RhG7MynmLmb7oxwBq8omy1Asw/HG8SN0gKRLpRDnZlJKFh5ip9qtDH\n/VR7YQCG9AZthh4wp/gqvokK3yJET8RzuFt1k+5qmY5/YeAqsd617hMKKYh7\nKbfdN5BkRs2EfCwq2TI1HZP7j18oDwe/QpA5bMeGE9ZUA4bbFgaIarpc+F85\nbImnHqZqpGNiycNw2Do3tigqn256S1QUU6zdHFwaFmVBApUhLn57asrTbCmM\nEMYEtcIv7HB7aFG0pkcjfizH1lqWTtJ9N1r8plttsRsmBqxoe/sA3X7QV+2x\nTFQ0NdB2CqSmb1IQOHGsfoYwP+tNrQc6SF/vC1YONpLpK1KvckRwuvvPL4AR\nGiB8+thFtYLeIDvSe2KDa1upqQedZhWCpEuYNuJEbiaaFQYOGm1k+3wqOPyp\n4AMO\r\n=ibmo\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"215610337a4cbcec2432b5f8a15e160f1e596cc6","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.17.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.17.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.2.0","@brandingbrand/fsfoundation":"^10.2.0","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.2.0_1603901465180_0.831492550132604","host":"s3://npm-registry-packages"}},"10.2.1":{"name":"@brandingbrand/fsengage","version":"10.2.1","license":"MIT","_id":"@brandingbrand/fsengage@10.2.1","maintainers":[{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"jbancroft","email":"joshabancroft@gmail.com"},{"name":"alvaroloss","email":"alvaro.lossada.1992@gmail.com"},{"name":"bhushankini","email":"bhushan.kini@gmail.com"},{"name":"jhuerkamp","email":"jhuerkamp@gmail.com"},{"name":"andretodman","email":"oinsighto@mac.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"}],"dist":{"shasum":"4fae08514edca13462a541d7314946fe469e8742","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.2.1.tgz","fileCount":162,"integrity":"sha512-wM1h+pGWSBEBMCJSmCt9JODKD8L1+GvBCCBLDLUtOA/fSCaJmGyUqlQtRqmJ60+aJLVNgS4qSr5svOXV7C556w==","signatures":[{"sig":"MEUCIHMhUbFyI4GbslPkZNIrcAjicddGKbtoDk6sbWwQ07RRAiEAkFlo0WUTAKSZ9mcY1jq+svsZ7oa0vHCeLtLE1sgKxIs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":413924,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmt7KCRA9TVsSAnZWagAAk1oP/15Oxdq3FCqKawuA9XHP\nq4TqdxkmVRX5WzJa3EkEa7IQSz47R7WSmtI9puPu1ZzNC6GbCIwBzp135QPK\no+79H60WEm+8bMm+aYUs4QWSlfNep8KSgYproUOyVuQ/HqJ18eCvl1oCSgPq\nx/N+O2mwnd+3x+nOssL/FKjaTlpJXNbjZxBlHCPJoF7l4DpBpVqbQisi8Nf6\nwd3FK4YKQtqE/xPa1cXDkyYfJDrtkcG6nimtuva+FMuyFOjeNh2PbQhdp5O9\n4SnhkRT3wHn901P3dmZSOd1/PyuafdjrXcmk1nC+AQvfL21CU1nYNPSZ3RM9\npVcFLZb+ccPLZtBTFasNMTkvJkAscpn3NurR+PHfqAF7CUVBi88dKKCkiQPx\n8MjfEQx5MOjBLUgV++fZ7PEkkn9Qeu+aLAl0IhhKBGXxMEE5moIC4pKC3t7H\nELrEgn1ogt2ucI2KHqJYJOTYuUJxJeGyQVtmyiIjMUQJedkDfLWs2U9S0Rp3\nPYeWHiw+BW54RPS5CK5DAI+GKD/P0ZP+q9qKj791mwUmJhi3HDQ4O9M8UhzL\nt5V/7Vwt0hn2PT373F898EZ1jUeEjjPqN3Cd77wwc2KdSRE9aR235TYwkjyY\n18IhI7Mpj8ZV7LKNk2A0aErwVFW0VB3cv+REIAVEMQdLUHv2TQZdDfpHDiZf\n5eWO\r\n=ySeT\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"a1b314dd81095514768f0522bf16ca508fe32e8a","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.17.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.17.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.2.1","@brandingbrand/fsfoundation":"^10.2.1","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.2.1_1603985098164_0.5997647904216188","host":"s3://npm-registry-packages"}},"10.2.2":{"name":"@brandingbrand/fsengage","version":"10.2.2","license":"MIT","_id":"@brandingbrand/fsengage@10.2.2","maintainers":[{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"jbancroft","email":"joshabancroft@gmail.com"},{"name":"alvaroloss","email":"alvaro.lossada.1992@gmail.com"},{"name":"bhushankini","email":"bhushan.kini@gmail.com"},{"name":"jhuerkamp","email":"jhuerkamp@gmail.com"},{"name":"andretodman","email":"oinsighto@mac.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"}],"dist":{"shasum":"1149482d005efc4c3eac683fea692297eea0eaa6","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.2.2.tgz","fileCount":162,"integrity":"sha512-FbCf4CJ+Nbv4TaO7u8NWiyjPu9mipV3H5a+0PE4Rdue0dMpG6sGicMAt4RGyuDqL8w4s8f+igERQoKRd8ILHRA==","signatures":[{"sig":"MEUCIEkBct2wZ8C2UnPnukfIPlmB9Oq/H4UkSHUu1hp8/sAwAiEA8O+RJmp28qXbHiA0c10ng/mK9iG9GdvGDX0bM17ybnc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":414088,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfmxfICRA9TVsSAnZWagAAi2gQAIac8ARcb29wdJZZ0bBG\nIRYxLoJC97qUDSQspZwamE7c3s4TO3eLT/b1PecO6k6hFs3ZszZHOk8PEFG9\nZAS5plpNKTzfpg5NFggoUGez8EMcRpLtj+NChJQZCm2611CNg+0bWrvH5eGb\nl7pbT7YLh4hw7JuLOogMmLOG7gOjvV9XiA/ETJL0DZSDrberiwWcHEXOV5lu\nNfSmZCkoC9IppI5xnB5fI3FdEUR/lJyXczLS+SvfGBGMVZqrgu18DWZpu3w8\nHC2pBVXufz0FIuemNUZfzqYasDXCTZxXwoBvuvJ3MzkEqhd94Fjh3Pmf/iYv\nKzOVyreEOb7xvCM74KCPAO026VYQWKePoY/rq70N9EenREBbXR44ZlKutbPs\nMj9T3KbnSYoxjA5vv97gZjoGZZNzYIEkp5gtHhM1bmMTZwT+W30LzVoCGeEF\nFLUb39TVMDNfCEPKpzM5GZAUmFWOJzaZUB8SbeDFdphPlZakhv2K0ADfRnea\n8QURZPU4XNCtdVL4hulN2/EMvir+PPWATA2e2QQr1AlySXugv7bYQEmAyXV0\nBGK6SY2saQNIXkyk09LGxHJNKLF+zETUhNHCNXg4llokn++coF/Aec/soSVz\nSJUgjyLZj4rOEoKcI5gJ/HHZTdxqkIGIVnds3Lht0j1LlBTHvppJTP+3TrUU\nmhLH\r\n=hh3A\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"0eaee2ae1213b915068c62411610acaeb4607595","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.17.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.17.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.2.2","@brandingbrand/fsfoundation":"^10.2.2","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.2.2_1603999687556_0.4407547971863306","host":"s3://npm-registry-packages"}},"10.3.0":{"name":"@brandingbrand/fsengage","version":"10.3.0","license":"MIT","_id":"@brandingbrand/fsengage@10.3.0","maintainers":[{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"jbancroft","email":"joshabancroft@gmail.com"},{"name":"alvaroloss","email":"alvaro.lossada.1992@gmail.com"},{"name":"bhushankini","email":"bhushan.kini@gmail.com"},{"name":"jhuerkamp","email":"jhuerkamp@gmail.com"},{"name":"andretodman","email":"oinsighto@mac.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"}],"dist":{"shasum":"e1465ceb4cae8a6811f45f8443d0a467782e6e36","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.3.0.tgz","fileCount":162,"integrity":"sha512-fEU/c91UOTRMIMbVC3k297bqNARD8oZsG4EWchocCzKDAzptyqml5CwUDGA3qOI7MxbFDGnQgjGmEd/HN0Kxiw==","signatures":[{"sig":"MEQCIAbwH/+flPQGQtZeeQZA7WeQCwghJHLtgF+g7SNcUaxAAiADgeaOV4KnPJCLKOpT/Gel68yJXn6ZyeyGwEwZxLa7Hw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":414251,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfpcIqCRA9TVsSAnZWagAATsgQAKNjhNsJ3NKpNt8LcewE\n3xjJkCOsOyPnTN3Bj+lJ6EUhrq7f8ay7VclO6MT2JM/H3wSOqfOn3YIjhte+\n/B30vL2Qq1HBVsisRUpVVhWCV2ImsTVdWvFftav81OztqCc2evGmg0PT3Zx2\nFRtNvhgTJkXv4Wed9R/z2yY22hl4pAZJvbdO2xObG0zQ91WhvYj9nTmZR3Bz\n3sxRx8QjcIuNc4tbrabKGU1LsH2zjkhw0OT4T2w89d0NqTFpw8eDD5Qh1F0Y\nyBaInV7Tvqdn+2ujHkn7KpCC6ktV2xIwRq7noNhHi5yixCGkHyt3pnJzHtFl\nsqX35IdEu1G28+D6B8A5YeTrw2qBmTMdgveEPKV4CGPAfxTPvOStk2/Zt6CR\n76M5bEVhI99IWP/IjEeyyPSIiQGw+cVWhRplPKdvaY6ZNl4gCaMJYPM+T2kc\nn3ExpWfXpcni2hP7A6eM5PHxoMwlUWk98g1f9wUe7lfOjoCan+WZbhrukLYk\n+WYwWerQMck0z6Ke/l71Rlnu9GZjN1kt1p6GUowyDbvkrT7e1W5KP+pb7Itz\nn0sNuZfgU204oVVbIe3RjsjdphzUJJOIOi9/1JGiBJEC0gS2fI/D0qly/Lop\niT5VD5WLM9WgCb64iOpyiFTUDEYJEcFE8CB0C1kfvBqdbf4hw45J4JOGuqZf\n6aHD\r\n=vQod\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"eecc4eaab727f796e5f9ad718464fcfe80cc8f71","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.17.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.17.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.3.0","@brandingbrand/fsfoundation":"^10.3.0","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.3.0_1604698665826_0.12878049542188053","host":"s3://npm-registry-packages"}},"10.4.0":{"name":"@brandingbrand/fsengage","version":"10.4.0","license":"MIT","_id":"@brandingbrand/fsengage@10.4.0","maintainers":[{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"bhushankini","email":"bhushan.kini@gmail.com"},{"name":"jhuerkamp","email":"jhuerkamp@gmail.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"}],"dist":{"shasum":"c825df2e983bd309ade331cf1d1aff121882db9a","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.4.0.tgz","fileCount":162,"integrity":"sha512-GriezL13UCSq5wsCW+el7PG6WcGnqbdU7qQcph0wrnqoIGthbFlJllQUpXuxCfugPoz+ka/2380LgLAtqqxwYQ==","signatures":[{"sig":"MEYCIQD9OZcgswQmTD2msEAnDpxczWZgRXbhjGKmBPforSvzRQIhAN7179NVKGQTRQSadLtmjoaADFfoFmamMnb14cToW/3Z","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":414414,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfssp9CRA9TVsSAnZWagAAC5cP/1rLjJKVf6eTHo6zV6H/\nsl0AXI5eCrxkA/oKJOLSNRv4l0KO+L8GP0iZUzZnfdhlqiDCf7CHgQTLT44P\nCfDj7apmiH2RElExJkGbpMyyt2ab6OQBhHOAQ6CNkSlF/C1x75ZtXMeaNZF2\nXhr/fjBtDccu0dwDMHTW6TIQvIIRPTADVi3Dh3CW5clstOW7M5dzdkxhgCUN\nkyQkWWflRBx+bz4cK2Kaaat6cxsMSmEq+H4TaqhApEVOjovUw2zzNKRicp8A\nTyXlXvZCSjVrPpSG1B149epCp8tS/nHj0dxGjwurbbiZyaWn9+K25t67qg+I\nZWJI7iPlZM7SwVakDDfa8rqXTytrG8e+ysqZQ/UaIs/UC+95dej4ZBhagF/5\n2tD99nosNbIxgevuZhIiFMp/TTMfv8XJDuVsUm3X6vVfPugoO9V/63HK6ztT\n2BtCU9HCCa5xkil1uQfQ7pAzzVCqcEwzuJFdqeM80yy8/JTNX9Ho29NZEO9M\nspRMJUiMGQ1OY45VhJuOUyvnZyoXXti93kbalu4LpzkKIw/mbqMuIl0pRBRX\nBNQWTbkfc+RC1wx1+pVyM3kkH1/C1iBS4Kdcfn13kg1Ei+OKsgqAlcRaeAmj\n/Xk2VELrZLUBV3nMqFkfVGg0CbDouiLem2UF9m8O8QFmuwlJiNNrUEZd43Kw\nGCti\r\n=ITFj\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"b3be21b4a8e6166176ae72eab8240b3ab0d71f4e","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.17.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.17.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.4.0","@brandingbrand/fsfoundation":"^10.4.0","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.4.0_1605552765138_0.39389987110546887","host":"s3://npm-registry-packages"}},"10.5.0-alpha.0":{"name":"@brandingbrand/fsengage","version":"10.5.0-alpha.0","license":"MIT","_id":"@brandingbrand/fsengage@10.5.0-alpha.0","maintainers":[{"name":"schmerb","email":"mikeschmerbeck@gmail.com"},{"name":"iwelch","email":"welchcisaac@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"bhushankini","email":"bhushan.kini@gmail.com"},{"name":"jhuerkamp","email":"jhuerkamp@gmail.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"}],"dist":{"shasum":"d7ef4d45d10adef8a7bf84f648765b442b79ec21","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.5.0-alpha.0.tgz","fileCount":162,"integrity":"sha512-8Fw6aNu/B4cMCeezYaSsjWe1FNzs+aOi0ZCUmE0l8ANA3scc6wkI9iJdYTb6YOaRj+oHnV8R0kCLF1uR3uU5cg==","signatures":[{"sig":"MEQCIGn2OM7HnWr8bm9sBBiAqHaWEh2J9pqDAB8Grx8qnTT0AiADYW1Kf2cwscUl1OgaDZS2LNqwXgSRpzzT9KVxNKGIsQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":414617,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfxRgqCRA9TVsSAnZWagAA8aUP/3qP91FWCfL+I1UutPa+\nGzI0npMdZ/s0CXNk7o6muF2gDmy1WMdui5zFaDZDf/f8LN8B8d5HCjVopzYj\nu+YHHo4WuC0QKD49ljPNTvdVgRpmoLjazRSWELuLwZdP5UzhVO30EkJrRmGx\n2uLpGmhaATtvKKLezjGQuqWFWeHWl4ZsNJ1YgMfItRrMJRKV1rLldlWEgjM3\ngGq949HM1dFT8uzM0g1yBnGZka2nv+ouyl8N0qQTdzkTIDUYDwlp6cMlRPmo\nJiYIQEZ4jVfHQBEr69fYOIJZvaFJUXzSKSrS5fJO42W09ZjSQKKqDEeBTjSM\n74zMjJP4gs8nLOWYYyBVnchoa5IhLvR5cW6OdkPO4urfqN3N1kAMUBencDyn\nWGlP4PyPzUxNMf0zZbqTZR/76BSy3bouE5kIvdTJMNAVoRzxA9LVMzrU90nI\nGT7IM1bPgNlsSKXwY+7FGZHenbaWauQPlVVClkBDfJ6cG5CHaZVH61oQ4Kby\nkxH+MY8yCuZdZi3GOOGRdRlfQZJvDT2/CJI+CAZtUOfizixGxNiULROG1ENC\npWtpjyHCaIqCUXNNa4VqnWUiPJSgvnR/LhbDKFPx1PKoQkF290RiX6tLDumI\nC55JqjoXK9oRICbjU1QpUySYjnJg58GE69WeENf3hjohTsOoWjqDw4pf7HFV\nR+s1\r\n=pwaM\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"c1608a05e8738cc3eef06ad0848ad08d910b4d38","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.17.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.17.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.5.0-alpha.0","@brandingbrand/fsfoundation":"^10.5.0-alpha.0","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.5.0-alpha.0_1606752298143_0.6853867176831543","host":"s3://npm-registry-packages"}},"10.5.0-alpha.1":{"name":"@brandingbrand/fsengage","version":"10.5.0-alpha.1","license":"MIT","_id":"@brandingbrand/fsengage@10.5.0-alpha.1","maintainers":[{"name":"schmerb","email":"mikeschmerbeck@gmail.com"},{"name":"iwelch","email":"welchcisaac@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"bhushankini","email":"bhushan.kini@gmail.com"},{"name":"jhuerkamp","email":"jhuerkamp@gmail.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"}],"dist":{"shasum":"b9e0d0d5a97b943d1835199b98c3ea374f40cc99","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.5.0-alpha.1.tgz","fileCount":162,"integrity":"sha512-PvZHbs1Bfg4ECGLcF3QN6UKutUm7Ibxt3Twea6hNIjzjxCXIIvTZc+egULzOM/gE4pqkCanC2GM1+6liAJBh1w==","signatures":[{"sig":"MEUCIQCDqj5vHPKrWZFsuVg6ipxPjYgMiqRA0cufldHWWdXTJwIgEktU8k017zT9MWV4u71MJqsg6vJ0Mw2upMTqAymiVUo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":414804,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfxS30CRA9TVsSAnZWagAAPewP/2/mIBjgexh938zx5m+J\nNljTK24uxGiVJAIWF2Wrv6LLzFK2H6U5Ork4tdcctEGF5xtdLu+sfC+447tl\n+viQsbbyewMWrUVaeNtvBZzTFQuQaNIEuU1wQ2oxO/ld+FwTthmrnDSlXMGA\ncC2SSG5adnlxIQkVNoC1Od9+3apRFH86GWy8FGJ/VFuBoVUeqRJuHVHtA5W7\nia6LdNLdPv3Lj6zObPpU9XuGfZ6SoQckayqd7sbXjUp5HRoftYhVyNSkUNzU\nqnsJdKO4+JIeZYdD/knrW+UngeAUBCPSfpjki3oFQ03bczIWO6Zdp31/tyfS\n5TFzsSwJiAIvDeXv5cMomDcSwW8gbT9VLSA1xuGbUFnMYaU+gElfDkcT4bWp\nrA+wgrmWYOYTUYRxenUlyJH9VnENQ1kp4U6nsZaMGgDF6v9IG4rcogTqJKKJ\nEBOiJ8NGMVd1SKwdw4icdvPSXAlFj1eZSlMVbxb998gKT2Al+ekTKp8KJhhQ\nxCQI/lLTKzuzLwSUcfoqHB6gS6wRyBRJsMx26B+bUeTuNCXI+80ma5vwbDqq\nhlCrwrKxYJ/NgkLcGXZiMHlZFtHb71x373S2rFxKHGkNbBMCj4N05r8HWcvi\nv0N0gMyspoPF4zqDJs0nyqbTs+TKb+f0zZSLn7bgZ+5x4zgxejHtPi8r2b7Z\nMVkI\r\n=sX+z\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"a78ddc7d15638736893360a10e5aed0b7cda6155","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.17.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.17.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.5.0-alpha.1","@brandingbrand/fsfoundation":"^10.5.0-alpha.1","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.5.0-alpha.1_1606757876147_0.0754494189013768","host":"s3://npm-registry-packages"}},"10.5.0":{"name":"@brandingbrand/fsengage","version":"10.5.0","license":"MIT","_id":"@brandingbrand/fsengage@10.5.0","maintainers":[{"name":"schmerb","email":"mikeschmerbeck@gmail.com"},{"name":"iwelch","email":"welchcisaac@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"bhushankini","email":"bhushan.kini@gmail.com"},{"name":"jhuerkamp","email":"jhuerkamp@gmail.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"}],"dist":{"shasum":"78ffd9abaa5f20d7f009911e5ef3b85b925f5dae","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.5.0.tgz","fileCount":162,"integrity":"sha512-llnYrJwZWbi150ap6UqxQb3TkhD9H8oNei76FYz9XQKo5B/d00Z5mnQ22iRtRfEPfYb5vweiAp7yKtGyM84kNw==","signatures":[{"sig":"MEUCICoHEP+1qpQbDwgR7IoVWVaxuAmzjrOgj2M4ppwhGRQlAiEA4fQa48uQ0t6eMysKeRTheuWs88EGY1cq+CEKojeq9/M=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":416686,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfymOSCRA9TVsSAnZWagAALhUP/3O2nV2y9VSttyQRnWXQ\nEeYn8NgrbCne+tMiqAckHTBZUbMOvHoQy1xau7BV2Vr0YgNRsKyRqzl8FDkV\nqlWKpz/2LgGBFkB4cLo8pNV+ZIRPgrPWHTmyfFkqQv4p/eftG6u2dVgHB1vM\n2XAOrdgYT6+y8GlPhE44bS89hyjNYqkLXI4JoYNVGavhlezjnT3qZqgN1aM1\nuaWIp5/0VxwCif32cwAyucoK6nrNd3WhMQ42pyHBR0qV0X/y28SN/yqHTYX7\naXmAFFwZtp6xtX7JHEQkX0MhIS1Ekwdg66auBxax9I91+Lx+LYDiczZ/2a4E\nbCjejuQEr+0UWSNt/ZHENal9AyA/64oMkQb4X7sJHtGW38HPYA2gR/w0/+vI\nl/Er1nXK68nbE2IswMU22GXQXkauvq02ChR78ZIBdIEjmccKjH/GvIBk2fHh\np8RuYfb/ba9of9eO4JBHQCk/e9yZPJtS46K9oYvbGqapx9WyQHw5GN6ekFmA\nfIrnZWCxrRmJr+M4Z0eX3bLS0S13BbGj0/UyNwwe4eXNBGRMD5/EbnetHiCy\nJM5JG2GsCXs0y63P4McvrtXco0OnbiHry81B5vYWV/6hh7HNXLuZxFFuCpsv\nCFAAzhB7Wjha/sbZRkX5l4oh9aeFaIuvirL9GBL15x0sehSaH2TB4bvntMns\nNNnx\r\n=IWHO\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"5135f818ff2a1eb2fb7226c5fcb5816fdd8469c4","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.17.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.17.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.5.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^10.5.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.5.0_1607099281504_0.35656960223118217","host":"s3://npm-registry-packages"}},"10.5.1":{"name":"@brandingbrand/fsengage","version":"10.5.1","license":"MIT","_id":"@brandingbrand/fsengage@10.5.1","maintainers":[{"name":"schmerb","email":"mikeschmerbeck@gmail.com"},{"name":"iwelch","email":"welchcisaac@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"bhushankini","email":"bhushan.kini@gmail.com"},{"name":"jhuerkamp","email":"jhuerkamp@gmail.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"}],"dist":{"shasum":"45d4f4bf1f3a5ea8901553543168b93be4aea0d0","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.5.1.tgz","fileCount":162,"integrity":"sha512-+CAkGimk7+nF+C9CqoBAaDb+GDFxJhwsbci+iZu8f0uzCKTXADlSt3gnYTv9bsX/IgSpc21SIQPnEIos5yv0ew==","signatures":[{"sig":"MEUCICLdNI0WRv/XUxkwpQxUAQ0kx4s1QXPm8I7SPsXClOqsAiEAzMubimF3emaNz/YijunlOGgMc5t3+N0dNo2HAjBI24w=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":416850,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfzkNJCRA9TVsSAnZWagAAuBoQAKCa1vetcg6AdeHBoya5\nBXtwL0brzDl7UThT5P/tFnp5LQNjWDfwGZY91WCLdYlwXR1T5xfnKlCRaTi7\n3YaxXSbdQYB7yc5fl/0NcY3lelX9OPx+o1HYyAS3xsHOBbS04T5T6wn7fZmQ\n4Ia/ZNFuXopuYKcDMPtRhjZVgtXtoye68xBAEeHXobOnNfYR0hHRTR82R7/T\nX+AGczyI1IizTashiyHb6aTpls0MGttcLd30gp9tR8Ikv58OHJdQnI00WUDb\nQIvEQUdDbXGf3Tp+uSh6GcUstBjzAQKszYwEAEdsYi6VIvzJQ4V9RiveMYqH\nn2bv5iie0DFbnAQQXL5tZjSQPOdQDQBkMN09e9OpmreO3ckJHQPIBAs0WEvz\n8T+wVwdree3YhARIbjevNPfTxGc+mVfRj0HxwbXQ8aCc9zuxrI8YWm6QOF3o\nLr5eEpgP8P44BD+CVVnqBE+/J/WrvsfkRJ70cvReST7e/DWZEVd3WUt/e/jd\nezG371eShCBjCEXi8cTgWWcFxThHwCjE+h3CtQfOJtSvcaVUKcQCLNA/9T34\nV3ysFSqqjxZu+8WkutO5JGLaGixMJFRnrkhqGKnbiQu/CxwaNGzWQTamlddM\n1NvgD7q2ZCE2eHhK976eREOU346hsJ2UAwqwzO3g6l6kxtpWAlW5QXus5iB4\ntSw3\r\n=F63g\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"b8bf9991e0a8565f243d691000aa6480688b9676","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.17.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.17.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.5.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^10.5.1","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.5.1_1607353160564_0.23352992928553595","host":"s3://npm-registry-packages"}},"10.6.0-alpha.0":{"name":"@brandingbrand/fsengage","version":"10.6.0-alpha.0","license":"MIT","_id":"@brandingbrand/fsengage@10.6.0-alpha.0","maintainers":[{"name":"schmerb","email":"mikeschmerbeck@gmail.com"},{"name":"iwelch","email":"welchcisaac@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"bhushankini","email":"bhushan.kini@gmail.com"},{"name":"jhuerkamp","email":"jhuerkamp@gmail.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"}],"dist":{"shasum":"600fb10a33bdd09b02c109887a055fc7fa235fa0","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.6.0-alpha.0.tgz","fileCount":162,"integrity":"sha512-gR8QEzhw40tCj0/9ofb1Ha0PIbJeXCKWraqwQrc8vlNdThMTd+G9s/VfCTGSAvRmv9HwDbfVOXOe/7yZUAdI1A==","signatures":[{"sig":"MEQCIGWtdUTHrP9ecNyrDH6WdNMpfT3UJrWGX8zrkM3RCRuNAiAXshuZcvFW2pAYv8Iiih2G6g2qpBmqdSltpno1c96yVg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":417053,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfz++aCRA9TVsSAnZWagAAlIgP/2r1/PLtQurZINs57Grc\n7b3Kqd3NhZtrzNuAzEeCvndO6AxxjfLVROnbwxPQ5bC1oCydlwc5kJ8tSi7i\n1G8ASr1lY8/d9Y4ZvpKSaLjJNQhjPUgwQge4VgyzjMNzBgu2QHRqSgKzhsnx\nx54j5P5HZ6UfqNiwXvbdzC5ccNY0h6uuhg1kPk0ftWGpeDpgLilH0WIuYScI\nQusNh2hs2FOM48RQy0iFGetlkFXIvcVb6VEfnfrnmtTuX7PNN37jW2Waaoxr\n/TP5KlusncQ6jJdk+s3aqTyHi0smI/Lu/HwNcp6mNc221syJ/Njb/C7xaXC5\nbJ8wZRyurhiTzfzIzJBot5hvBcaFPeMlcFhTCt1XpYFZy2IKyU/BfXap6Fev\nExnSeR3gRJv40AEjqAivCeM62g94MlC5rAraSD8o58cAb1ZjX0apuUv0tRd9\n6GVwLNR4oVxldXXdNo9OA7njdJkZ91lscyJvYVznx2X9E3zV80LSw945waRu\nelzBSjWMbKjva/yy8HlV1kOhUFnTT9iqdHzWchA1Lzj0XLZBsyGqJjero6Vz\nNLVeN3Jj7G4CtU3a7GnhT7T0XQU/Owe2MLhy3vbJX4bwCsYlqa0XNXIqnCrD\npddcwgWePoYaOo8QidZbaa3l8Od0whxwNs7GR+bfOe7ue7tWsIRFYnmqGMxs\nM9Vq\r\n=q49S\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"413e30fd3b78a142787528944751dca22a56f5a2","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.17.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.17.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.6.0-alpha.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^10.6.0-alpha.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.6.0-alpha.0_1607462810378_0.3160056356799539","host":"s3://npm-registry-packages"}},"10.6.0-alpha.1":{"name":"@brandingbrand/fsengage","version":"10.6.0-alpha.1","license":"MIT","_id":"@brandingbrand/fsengage@10.6.0-alpha.1","maintainers":[{"name":"schmerb","email":"mikeschmerbeck@gmail.com"},{"name":"iwelch","email":"welchcisaac@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"bhushankini","email":"bhushan.kini@gmail.com"},{"name":"jhuerkamp","email":"jhuerkamp@gmail.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"}],"dist":{"shasum":"ae91886c81047a17ac0ea44cceddb8d5f75a92ea","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.6.0-alpha.1.tgz","fileCount":162,"integrity":"sha512-xxyJ2zqKucOmTCEkwy9XorfEdSSPGAsNXzyeCaIRf1gnQfEDbH7vTgefMj3jRkc2f/N7oCmUyJAaWHsR68W7SA==","signatures":[{"sig":"MEUCIQCiPMxuZUWFRRhhowRdywWKNDCfeSs1T8DX4NLh4XiCpwIgAOCZZI5oxJ8UQ82Upo3uGK56sOjuJu4ZtVNtvRp6wk8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":417240,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0RrSCRA9TVsSAnZWagAANkYQAIBy9K0YxTOaHBkLyMYN\nfl6VPBss08/9SaOu2zO475i5Sa02ihIUzZX52LuOegaLTqp3OPuih4aEdx2t\netdyAXaQPeOTKBKj8IVECPZzOxJKvhj86ZL6cMCupPSEiCaeBeAeaePGM+nq\n8+MYiNECfUoCFK5w1Dg2DCu2EYRER4TPv2w7hIebvuf6NoX74o3wNcRBptXx\nDp/qpzqMEEhewF5z3ovxsIA3SnUN+ZN7zqhh90odO0ngiGACs5WMCAs8M8cz\nH5cgERAIQXs8glSL72ZX05kl7f7uusD/4fqY1JxO5gvKZdTTs0caC87FhEpD\nPmpdFzcO9Eyj/Xks2OrQoM4lcicTwIhO15Nnj/+NUlGXnc5ybN6r1jseGLuo\natycJq2O+y21XNiN/ox4db91myBdoBlstBt3VQyqcKxlkzbcWdCfpjWVFC/a\nQ/2A5O2mGTzyOg/09M0Et405dIjBKYCdfeebA5Sbn2cOwXcd7I0Wo9qS3u8t\njiucHKIfEMnBvkiNJ3xunEPd6Ik/w4Wg9kfimnfi1vOCno+ZbRMfQB0VyATX\nj0oyg8edNrF6FnnUFoYEkV8ntfmSTdm6YcfUADH3L+y54qd0j268JG1u+33R\nP/r8Bm0GjIw+hIeumJmbSJy5pQNMoY1K1SWtJ9KYs+AAcYQgWaHweu/TlUfA\nBL8r\r\n=QuBm\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"19b5b041a406db662a15a0c5e8432fe854c36fc1","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.17.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.17.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.6.0-alpha.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^10.6.0-alpha.1","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.6.0-alpha.1_1607539409838_0.6605011592192505","host":"s3://npm-registry-packages"}},"10.6.0-alpha.2":{"name":"@brandingbrand/fsengage","version":"10.6.0-alpha.2","license":"MIT","_id":"@brandingbrand/fsengage@10.6.0-alpha.2","maintainers":[{"name":"schmerb","email":"mikeschmerbeck@gmail.com"},{"name":"iwelch","email":"welchcisaac@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"bhushankini","email":"bhushan.kini@gmail.com"},{"name":"jhuerkamp","email":"jhuerkamp@gmail.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"}],"dist":{"shasum":"5a231db4af1b6422f610d9069dc6f1c1cf2a01fc","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.6.0-alpha.2.tgz","fileCount":162,"integrity":"sha512-QkUWwfqCvEKeeAoEv8uIMRVZpd+yG88gWzsFLBJu5q3euYv4hMSmAYyJhIy5zQEkkataEdiMHUkxF8ZNPw48eg==","signatures":[{"sig":"MEYCIQCi8zyEsf4G0Q9N8HUBN9J4UaXwgQP19yTfVnwhll0jewIhAOhCAeY+dr8+2Ew+hiY/8r5lOqbxwK+GUlWTGzTKH283","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":417614,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0nqECRA9TVsSAnZWagAAoHYP/2i6qhR4KdfPTbsiZLUN\n5/ft2Jre936Zl061oOo6iTlHTe+Iz187NZzB4xISbxu2xFSQTrNh44PBtVlP\nMWMacw/vXFJjWE8ZvvofNYZwe+nAUcU/hTm/E8d0J9jRFKY3jWzbTVCWUIm8\nVxtwgQ4o+VePPaRuh+Y9CzqyKJGyhSZu/NDlkRnAvzpmVNfvz1Q0t+Sln5Tf\n8TjVBFl3FzXncWlODPFD9A1fk7xOltJVZXz7/Y5LbGc5UglM4ot24P466Ftp\nvu1kteOMfmImCAu3u2I7q4Jy9NdgYhKHZxDD9u6T9VKAU04KEyZVRdngwD3I\n511tgIqnpPjY+Im6s73yfilIQ0CKpC0PMY2YH3PQ0ExlV2JnN4yOKbnjyKZn\n0ava8s3nT4hPcqeKvKP9SU4AIxqDra/d6TT2SJf7PPqe1uIfm5q6BuipoMCS\n1GuP7ENeSa5gU9TY93vDXtElBHCX2zKew4NgpZkHrWOrZdx6+T69GWbFrtpc\nb/O60Md2go3yW03HCbNz85ezkn0vcjQ1DXY00CjSTxBrjREyJllgOLupsWOE\n1n9I8vxhGPstfecR4DFLvffHUVeiLV73wdVKdvg0h5Op6OdEvXK1YKAvB2dU\ng4ny73o+1C4yhSNBTm0lwEjxfMZOfbqO95dmoCe9etE7lzwTypHE0q7iFatW\nH1O2\r\n=rlX4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"4a2b1d06327ac2901fff707431443bcce3c8e5d6","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.17.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.17.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.6.0-alpha.2","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^10.6.0-alpha.2","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.6.0-alpha.2_1607629444196_0.9033567330995251","host":"s3://npm-registry-packages"}},"10.6.0-alpha.3":{"name":"@brandingbrand/fsengage","version":"10.6.0-alpha.3","license":"MIT","_id":"@brandingbrand/fsengage@10.6.0-alpha.3","maintainers":[{"name":"schmerb","email":"mikeschmerbeck@gmail.com"},{"name":"iwelch","email":"welchcisaac@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"bhushankini","email":"bhushan.kini@gmail.com"},{"name":"jhuerkamp","email":"jhuerkamp@gmail.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"}],"dist":{"shasum":"f8e9bc60255bdd4e61874a40440424e61a8e9a63","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.6.0-alpha.3.tgz","fileCount":162,"integrity":"sha512-phmoZWC+LZBx2kzdEenH418DwBTZjooHeaHXwKTGr6b18GtUo44y0zxb3aVznlWHp0gJ+CO7hwxpy5qJJmZIGw==","signatures":[{"sig":"MEQCIC6WhiUiuKv4ZfuasDTooe5IRlZyYA69YYfRXLVCSDonAiB17SKiHxjHESv8YeO8VcqdHnc5kq5fbNrPkExX4GaYeQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":417801,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0qMQCRA9TVsSAnZWagAA468P/j4bXflpldfaXrLea0VJ\nLZ/bhbUo9h//4Nqta7gH7Ag7ap+Czr4cNA8ySgDmGoDAPlqHqxoBKHRxyxH9\n2v8Cha5OB6dy4pycf64SmaBrgUt0KdLUmTglT4k1Ipc2X9h9Rf1aDCHQnl0b\nDpOblJw02ZMI3skgkT7eIQgglVoMWQR2ba+emLEoojTdIxOpj2pVC3h9c4Kv\nIxWp769LtCUePA7H8W8pQAYG2DLtKo2UBfgGGOaCs88Gi6q6cpd+Q8VsfGKc\nYrpfr+owPVebz79+M2ZHqhIdPofx8EQz8AQBTaQzKFy0M89Tu8+i6xOBlO8y\ndQ6fGlvS8kk+yokNzAxyybpMb7yvpytqs2/e+3pNJ2FScMxdeGLR5VxbeWTW\ncJ/GPNuatvUgZ7skd6NJbyJU365XcEuMzJDveb/WgEet3JDd8H/a/+gcK2D1\nez/nQrtsyd0L1GOvEMIGEMalilZMHTQQrumhpbQDbe/cdyuzeYqntdSPoXHk\nWB285hzYXcZEBTLMlZCUbeGMvzDXQSUcg10JKnYk1P1kTkT9wbyO+fta0jqJ\nL1zqvDk6P451aeNR9uFUsG4KBTjlCCRfhnTpOkE02rFI5kPQWDc7R2b4Y6L/\nPuudugfByjMotg//ZicUSi0wpvWZRTcD54zR5gK8CzHVaECCGA4srDQjU7jq\ntkRu\r\n=mcEZ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"a38ba1ac0010160fbaacacad42e3af95cf439978","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.17.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.17.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.6.0-alpha.3","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^10.6.0-alpha.3","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.6.0-alpha.3_1607639823963_0.9012981396758848","host":"s3://npm-registry-packages"}},"10.6.0":{"name":"@brandingbrand/fsengage","version":"10.6.0","license":"MIT","_id":"@brandingbrand/fsengage@10.6.0","maintainers":[{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"bhushankini","email":"bhushan.kini@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"iwelch","email":"welchcisaac@gmail.com"},{"name":"schmerb","email":"mikeschmerbeck@gmail.com"}],"dist":{"shasum":"bc859658ab50a4b5257b62f4cdee4286e0585ca9","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.6.0.tgz","fileCount":162,"integrity":"sha512-wwb74D3edvS0ms+xsqtWtVun2bI1X/106XzFiKPCpn0aibQM1ARQsTPFTGCVWtii0VlZQ0RO2bLvKv6lZBSdqw==","signatures":[{"sig":"MEYCIQCxlTab50Hc6G1oVrU+lXg6adHdbSt4kkIymM/Mf6L1nQIhAJoaRm+PMgrhgDTptp//I13TvFEBfA8aJo2LL8H1GEH3","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":417013,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf1+YBCRA9TVsSAnZWagAA1xYP/1p9svKAErG1O9+FmXlB\nrm71CY1blxRj2sIn5kfMAbdXISl9W9qH7Hta6uOcdZkwOKoVL0qJjlrTs/c0\nM+PrmUqZ0mNAbxZZzsfEycn2eMItkHdEVjN3LLMXnieiIPERBptdx6khPxch\nDT9Tr+9r2whKDS/SO18Qb9wbvMQ16BfUiIwdPBuoX0Z4jZnXWWy4QqDDIJAe\nmtnynDzypa8otJv7mvxyMvlgeIhrSfpozu7fwYobaIsl+BtNHsadZmlwqz1Y\nPjELRkliwn5znNpkDFOhit7zmcSsa/mKv4cZAb5AwCxV/BMTLrE3v94RcqGR\nkYpfovN+53aSHBaRasxux8/WNLhLx9/RP/TDP07O3nN/EEJGEguD7PH5tfs6\nbB9kQ41aZo1H2GNYTuGIIyhrcb52t+w7R2bvvCLUDxRoJbw02TpQ/CirWXXW\n/qVIeJuwv2Ly2/yukVULFUKrirq9wAJ2AOT1tVHNR8ihZ5Xj+/A6mN/7VfDb\nzwMTXUu20d7Kj1D6aQg1P4aKa9E4gXbmgXWq79xZOXnv3erwGyOrRLv5IKYD\nzhMNJtvlGu71XFKd0pr/6Mff56Vj0DUTVWEGzO77SnpPPVtXGIOyMoYoKTsP\nJRw6Dfbr8lsR74CU8alz2Blih2lwz+k/8UQ7HJc8lokUf+ydu+WzK52byVvJ\ndMfk\r\n=QrIr\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"7a241bcfb38930378a8deaa0704b6068b5d4880b","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v15.4.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"15.4.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.6.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^10.6.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.6.0_1607984640435_0.5690556041557908","host":"s3://npm-registry-packages"}},"10.6.1":{"name":"@brandingbrand/fsengage","version":"10.6.1","license":"MIT","_id":"@brandingbrand/fsengage@10.6.1","maintainers":[{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"bhushankini","email":"bhushan.kini@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"iwelch","email":"welchcisaac@gmail.com"},{"name":"schmerb","email":"mikeschmerbeck@gmail.com"}],"dist":{"shasum":"a655fe0263972b45e62dff9d273917683d98c7e8","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.6.1.tgz","fileCount":162,"integrity":"sha512-l/y9kglU64dry3zT47xE2VUqS2H+7KsErBs2Xgcg3V5ohYoh1UbIb0kk0rEWmFxFWQwx56yJIveFc2vm8bmeFw==","signatures":[{"sig":"MEYCIQDXTMxJmLXLv9BDqMi9uZxvGPKBGxjDLTck/UqZAsBCVwIhAMVBNCdeaVL+Pvc02nUzt1Rsy5npGdLbY+u3kBqGZ2le","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":417177,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2lADCRA9TVsSAnZWagAAvEYP/jNBbauneb4K6Q2JBtmX\nSdZ/6mbhCFjeMf+hXJkaMP4CaaiFpZo6M0HJ6mKi925PYp0oJS9AUQ6+LSPq\nSJDHME9MPI4J0JsNbpO+B4+KGqbRpvxGJKI1mOj7zjgAPhwG9OWNQVpQhep+\nfhBYFQA2wVX2+28EVNgd24LC1kBsyaxz0c4ubQXrVk3ItJ2BrwwT6x78ww3u\naIwKqFC8PrOqhwrjDH6auqi6aFfSTsV/kRHSoN1j5O6Iy7IQKPu1dQ2mPFeT\nd8WsOvt6PVdm8gmlXSn3aFw6SpkxfBOokRW1BAqVkAm4+8xL9804lInURyB8\nUzId9pznCZqIiwBdz8Ttb5qen4et+RKrzeq1uN1wA+Oy9IjMFlJvB8rRxVpm\nLuCZch9i5HZKHjI+UKt5JitkCaoHX7M3ZbaffCM0zwB/D+sGVrfoTH8Us4uB\nSqviLdpIqlDy/RDDEuW5W6VF9t64ATEBGbNiVdjhJWVa8GkVtqfmrJzfrbDU\n8KWVYDR4kZfJdutSY8lgsiPOCwsEKgA1nfFKOEZkfclsDyHsEol3iYTtKEP4\nSvhYBeRt9eLTIJaT+NfTjrN5z6HytCbIaxD32+lCdEjY6VZFXLq/bRRT9Kdh\nDgN8OS6N5PNbvFmc96mDb+9Kz8JVV/OvT9GCQiXDemf6J948uQAWaSjMAIBq\nBmTW\r\n=ZJwz\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"e41257636ee6531704c7d52cf1682f11287d49e3","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v15.4.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"15.4.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.6.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^10.6.1","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.6.1_1608142851377_0.5077629624877675","host":"s3://npm-registry-packages"}},"10.7.0":{"name":"@brandingbrand/fsengage","version":"10.7.0","license":"MIT","_id":"@brandingbrand/fsengage@10.7.0","maintainers":[{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"bhushankini","email":"bhushan.kini@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"iwelch","email":"welchcisaac@gmail.com"},{"name":"schmerb","email":"mikeschmerbeck@gmail.com"}],"dist":{"shasum":"a1bcd3eb2b7f33c4260e5ec04bd4abd1acc3525d","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.7.0.tgz","fileCount":162,"integrity":"sha512-4I99fKZL+VnC5bIQfxf4eoC7PB0wK/fQfHNuIfx7IUepaX1mHQ9FK0B0W40yR4b3fnAUe92WNKgbdPpxyxIL0Q==","signatures":[{"sig":"MEQCIGQvZpeYTka2ifdNUNfjnhpqajDn+LenMH1MW3cAdYM1AiBg3fQmrgUvM7TUeXNQg2i80dR70RMXJ/uCOD3A4CERnQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":417340,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2nyHCRA9TVsSAnZWagAAUmoP/38VIrce8DUus08Gz8cq\ncOrhFaUMczwDkYAJfqpjdsOD8Hm8p0AKoVQHuUX0YaBOoWMFAG6hGhl2y/F2\noQkbD++tF0fFWVpip43OzqirKlucLPe7w7jXYzVTv73vc32Ukj16OsFPtLuw\nADJSuh8QJJUiJEoaQCGfL8RdiG74nnZlZObSSh80sEWu5w/VgvrQX7q0/b4S\nBv9nQvpJbfh0OBroi4kbRlTDAxwA2FtU/I4DxjpRz1vwUjrCMdjER55H8ejN\nO8bGtEzCVFGBe902M2Gu8AyQWEnzldoW4Bjr0+ZaiDe2lCtdOdYNLW8qPSK6\nrkEVzxoyKOzwue/+P4cdJvfFvIlhyv+D67ILS9lIie3N24A1FfLgyjKOAzHH\nWWu3dVCmKBLBxYkTi7CggcWXzU96BfPqUJa//K4ZyktaQ1jZZuKiUUfaVUri\nGeALHCzl7ljBR9ARehcLiJnS6EC1x74HIMyyw1nsaVIVkNNGyzYcBZeyVVlJ\nY2AcG/977qNitcpuBMxjEsXWb4xsS34TwNwJ0vrjSioJXr30I7fksONSLkoC\nEhSxHp4nzKBBV+d20izfalLLkazxxOcTw2+GMMzDEVLEhYNijewoTFCSKSfQ\ng6F6u8nSBYV+3A3s54T0j3an9m/HDZOt3Bo9KmGxSWzU3xA5Vu1xy8Jvw48w\nJ+xU\r\n=jZFz\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"14e484648f0804cf195fdd4d407d49e324179bc2","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v15.4.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"15.4.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.7.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^10.7.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.7.0_1608154247005_0.39489967580337315","host":"s3://npm-registry-packages"}},"10.2.3":{"name":"@brandingbrand/fsengage","version":"10.2.3","license":"MIT","_id":"@brandingbrand/fsengage@10.2.3","maintainers":[{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"bhushankini","email":"bhushan.kini@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"iwelch","email":"welchcisaac@gmail.com"},{"name":"schmerb","email":"mikeschmerbeck@gmail.com"}],"dist":{"shasum":"311ad7f377aac217a82d82e0540fce5050cc9784","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.2.3.tgz","fileCount":162,"integrity":"sha512-xjTtP/TRCkXTzsKvpsTeLEjWkK6cYBZseJRbUW1FDQMImNDF0gblgHP21WJ6RdlcEvhdjCGnRrDmtXbqhNubfg==","signatures":[{"sig":"MEYCIQCBbY+zcX7LbSV+tWZ+AIiq9pBKklSbxL2DjwKsgmp5HgIhAIMrANrGY/VZMGsn8Af5MKCLMCiBbuiPnvwWQ7+6ZdZO","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":414252,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf2o/1CRA9TVsSAnZWagAAcMQP/jdzt0F/dbrRhG2n0+0J\nL5Zg/lPc21JbFR/h6jbC3itoNt3V45bUB6u+j/y+Rt3XLLmgMbmWoSEamgwl\nPWJ0YH3uWajhknlpEN0JTBRshBWinWLJ4o9BVVwCp0PYpPYro2fwnizzGujC\nJ6N1etJW2CVtUJNvgMntSoBZaKaWRARCu85Wylq/SVZ3NeWTseKFodQ0/ZQE\nvSrJaWRakIcwoyhdubac7c0I0Lbx8Rf0o4LmZkvVKA2zkl0M9ufhVK4B3b+f\no73MMYEGR/CkT5kaxp42i+o5/bjXJiK3HtnVVE6AYVIWI85NphhLkX4xdK9O\ncnZHwzjdOW7oBCFL462pEA37j7auzLRYJg71Ew2wCfgGrqTA+P33iRUAa6gZ\nSDPx5Pe3uY5ZW9uXWEXMl/EkH6Rts4qnawI+SPn9ac+bNgyongacWpQm0JqX\nHznYAvsxnX+jt3lopW8Dn9XFsgIbgij9IR2S2LJD/Y6V52DScoBuLUYduQxj\norsPD4QsLm1qyiGxTYe37FXkHqz45SvnDnX65m/BUoCVa2cL8EiOeoUS+05n\nAUZ93HS4w15yfuqoMHZSILN+QWpNbJXQutuEJLMEAdnaAZPFMBxKtrxZii5X\neS3UOf3+t1TQeOZnruNFxWe/JOxkUFIdXeywmLFT2w16GuWHdz4+iTL6G98R\nMVSD\r\n=D+3a\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"8149a08b1f8fbfc8e8580c9042b2c4261671ee6a","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v15.4.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"15.4.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.2.3","@brandingbrand/fsfoundation":"^10.2.3","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.2.3_1608159220562_0.5929485393073584","host":"s3://npm-registry-packages"}},"10.8.0-alpha.0":{"name":"@brandingbrand/fsengage","version":"10.8.0-alpha.0","license":"MIT","_id":"@brandingbrand/fsengage@10.8.0-alpha.0","maintainers":[{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"bb-evar","email":"evar.smith@brandingbrand.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"bhushankini","email":"bhushan.kini@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"iwelch","email":"welchcisaac@gmail.com"},{"name":"schmerb","email":"mikeschmerbeck@gmail.com"}],"dist":{"shasum":"30cd4cabde8a6b26bff84ec8dae95bff42945b03","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.8.0-alpha.0.tgz","fileCount":162,"integrity":"sha512-hZBcW3sh657/E3+rcCRE9kIl/WYr0m0TMpC1GQB4SAVniyBl7QJ2szkJ6busoBEkE9y28XHZ5M+ho8bbHSRDyA==","signatures":[{"sig":"MEUCIFC8uVn7W7To32zM0ZFKB0A1u9Gp8/ifa4LrMTEGMZoaAiEAvSn5vfkmzQZotdt+6VpVCVJuFQ2vZJoh4CC4bHMXtZ4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":417543,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf26H6CRA9TVsSAnZWagAAhG0P/jpl0QSALall63PSkn42\nyQpj4W40KA888sOBQ6owQ3C5MUDBNG85SJKTfW687R+l2OzF2IhEyrp8VvqF\n8TopzGc7w9anYEyqJ1Gb47I8OhxF2xKN/mp9DvQnUhMHCgs/IWFsj7yQyleK\n4vRxrZaMrckn924JLyXvHBmn3scPG9LQ9uWbD6vgueZ1tmYuJgpXWpe5h02K\nOCpKSvxufNuL2AKN6PpjkFwEX8H/LiCfYcmqM28hB7qwcFOTev+3psSA+oqI\nPAzqcRFlcAw0KNP7Hbhp4VE9ZWx2KcTOsRWfYdG9nMZ1kHS9UTWYZe5w3Xkl\ncJFgtWMR6hnZIDokLCZ9XiKJevnO8bl4FkvkDgGVtoTU3/F7gRlyU5VrDGz1\n9hvW81F64ypKzIxmDI62al2O2WDZ8rnXYZk38oKIfMj/iflEjQ0Z0XAk8TRq\n+ZCUJUY2Kw8ndLNCtUDoPYE4RjpioODJ3kXcWXpr9TJXHfnKkBIrTHTbmzh7\n0r4gusP7LMVEiQoiCDc4USpAGf0hPYK3rgJZSAhs/FinDFVbwvj+xJS5p2Z8\nOiAN1YAPahEL8pUuMnZ+lvSmlCtgyNKYKFTf952bllgDxDtJG7be/EbdrSuJ\nnha/ExnCcZjUHY4yl2mc9Udn8peRjemyoOaoedIJflVUSlNmhfRfxPh6Qkjm\nBDIm\r\n=4+/o\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"73400879f0bd97cf297535d748c67004ded30899","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v15.4.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"15.4.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.8.0-alpha.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^10.8.0-alpha.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.8.0-alpha.0_1608229369585_0.42536864035754074","host":"s3://npm-registry-packages"}},"10.7.1":{"name":"@brandingbrand/fsengage","version":"10.7.1","license":"MIT","_id":"@brandingbrand/fsengage@10.7.1","maintainers":[{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"bhushankini","email":"bhushan.kini@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"iwelch","email":"welchcisaac@gmail.com"}],"dist":{"shasum":"95bdf348e556061dffc1eeca371754889c56b698","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.7.1.tgz","fileCount":162,"integrity":"sha512-pFHav93G+F02VhdILJuD3tPQ5LGFZzZjYJHLQWtR/BFtosLswfYE4FRpTM9PjwKXSdiPFhTgjEF33uhM9lFxtQ==","signatures":[{"sig":"MEUCIB2HBwiB/lJwZRWBXP5gkOuk7BZE6zwGoBYepPgo8DFSAiEAsHPf0bR+DlVk+y1DUmsEbpL/FkwsrT3BfW0tj/1ejds=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":417504,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9KkSCRA9TVsSAnZWagAAki0P/0XRlUYPzbjt/Ax2Fcia\nobny8sd8D9mfaVz1AkKYMDQ6UvB7gpVpzVrfkIfr6iQ+PewORoSrtpjeX4NF\nFQS+jLX+f6QeVR93SrU6+muX3nuH/SAdCgH8PPZN1n3phXcs4u0K4yw6OPu5\nfG+f/zYUn0f7d89LweDIfua5vOFGjj5xxH6EdGLun6jLFEUb+j1+lu9Na5Ra\ngwEqNFo0hZRFqwq4Y4fjMw3xjpnqgPOO59NNcvIhvzrJZ9JVkuPR0tn/u7u+\nac5ByVLGoNADk4mdBn/gGEQPmQuNCAkOdYt3c3J8F6RdxSNOL9BNB9bFd1Qc\no2AU3t4uxr+ABpJIDbBCM7mRGsItFqPU0uA24iPAH87QgGJnnMaP4qotk0qp\noucs1OQKvFn7bXsevBZUVGjn4K/SXNJNj6HQ1H5/d2J5mxBSZ8Qx2zJsvVZ4\nZh5mOCm4+7l54naQ6RMU1eunCULUR7WisT/VwR6dS0otd0hzAw/SuvvQgYuM\ncSCRZBr7YuRFfnou/kb2AGEPT7fw8nGjMahEi3qtmrQnmbUUK/Xqrxh7nHV2\n9wUQKMKucQOi5h8Sf9pXTjyQCoMWEgCuc4sQ422B7XxflargMVTapGIqJPNS\nka6BvQre/pQHIIgI4LzTe+AwjPWL1nc9EmRHjtYCI5cxhXrIXfe0AMg4EGiH\nwVIH\r\n=RoIJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"ee31242f3e5735f0d628e0450d835c10aff69ed3","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.7.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^10.7.1","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.7.1_1609869585780_0.6318200272320345","host":"s3://npm-registry-packages"}},"11.0.0-alpha.0":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.0","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.0","maintainers":[{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"bhushankini","email":"bhushan.kini@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"iwelch","email":"welchcisaac@gmail.com"}],"dist":{"shasum":"77b9d0d63a233e589bf5dc8a4943376d2b070286","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.0.tgz","fileCount":162,"integrity":"sha512-SBiy48kiOEUN65W79lZ+QahB6n1gRB0kMZy4OCKxx0eyPQiyETq+O5kSa+E7gjegly5F/Wt2L7+dhtj1SlMVvw==","signatures":[{"sig":"MEUCIDA+IzDDA4CUlmj20cLFmzlyvm1MviiCJhJ8QGpcPhj2AiEAnjFUSWFco+ZBLgVMaZNXD63ZsHYwNwswtWdIenWxeBk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":417707,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf/yRkCRA9TVsSAnZWagAAVGMP/imX+GOV51+y3Oijdb+j\nnIEaoOGveksrKFHTvSGpmvE/mopP1+mw7DG/rGEOVkkT3T21/yrb7XwE+kqc\nNFugilEwqu/MViBoaeH9QRVVpXQq3iVt4zHhl5Ij1AOGdwBB7xGnXoiEZaax\nxQuzKXq4H1vwYONErqYM/NpwKpELTX+MW5TTmOuBKuReWxkhVBIi4H17FpxQ\nHhns9iScBJtYlr8JHvFav6n0mvZBOKfos8CWKIHteGKWJrL6g7xEkdo+yQgt\nL6L6iseUeiI/Cj1m8UVB5LRovhkKl5rA+ML8RQhAQrQ/vtxcP3DeOXnNT6Si\np2qk/44pW/8R98V9Y8zTTBXIW4RavfMOn4VCReL2oloRhX2Xsnwcy440KQnc\nK25sAyx1l0/C8wP8d9znI4R5QDOZcMjVBOvxlrwLLCYXf9Tevjs/PUPTETdM\nRQgiPWzvgDTSjeez91X756kHIcFSTgBLpCPgDvmmH040wV5KjGh2D3vs5lwb\nBfYPMYTXUOtiRag3ll7w4gAVMH9NdIAYKMY0a9qYzjYWRTJeHgcirBH65bqu\nIPfMM3EDW05mycsgxEzZ+bvwAN2xCLrN3W36PnR1CtErP+WbJkZlRht1JZ++\njWBg491n8D5X1Tlj41xWk5auTRpGZIbbCGIjbxPUDsbObxdWRB+4mZ+Xq4Il\nknht\r\n=ZChj\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"6220810826b42ebf455847d9a79226e42757df36","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.0_1610556516354_0.8130257378162633","host":"s3://npm-registry-packages"}},"10.8.0":{"name":"@brandingbrand/fsengage","version":"10.8.0","license":"MIT","_id":"@brandingbrand/fsengage@10.8.0","maintainers":[{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"bhushankini","email":"bhushan.kini@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"iwelch","email":"welchcisaac@gmail.com"}],"dist":{"shasum":"f9539ed102e716b5bb634408831f916257c6e6e8","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.8.0.tgz","fileCount":162,"integrity":"sha512-dC3slp/bvqHM1mpap3v/Gph2Ni4s6rCBv+fqZ7MqLh37ltoFAhWqvIvF/C9+CabMI/L4KKZ0JdocHh/PZkcy+w==","signatures":[{"sig":"MEUCIQDGbtwMAiHfcrM9fd+cRkjW7ZYM61GPnZxb+4NN6dH2GQIgKztZ14agC33u1Wfbpbi0FC+amXqaet1qNFrqv8YQyKE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":417667,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgCv7tCRA9TVsSAnZWagAAGJ8QAIEHNerfGVDCqldPKUTj\nn/gVdMDTyajnSZdsgDmBVDUThB3Kf3hPMx7nOdAeV3pkyhHkQGGo5Jf4nxhN\nIbIWL+kRlyCHyEzwi6qokTBcOWxtcAW4UrSw1Hh+ardr7bngBYmjsgj6Ty+Q\nzzZYvFalUGeh9V/nsIMGSUASMG8pYI7kboUCE0hURlyzLCY87jAWgODKgC7w\nGpNRZEr27YDRHf/7ytfPWJ4ZDX7kOAQ0PsDiEBeO+dEeNeQHWfHAAIQpJkBJ\naTDf64XgxBm4P+ixJsfWTYwT11L06IYsSYRv1groEoc6rwW3Oc34i+3Yc6nV\nF+LiNdtMCikA4+27S/zAhRcEMfOzONXWhFZAj4OTfMo0JmlOU91P78pXx/gt\nNYsvs/46UX+P/rO3P5Haz2VoOogkBT+mfFNT56RcPwQa5eoYEMlsfI8XEFi3\nwIjptV31iMAmNVgjgEPiX9LIPoKJEKd2xL6/+evC+MNMbmY9c29xjH6sz7qp\n/31+JjCX8bvGIEA69R/QodoqBQlUDQSQWxIpN1oVaM53yEuqvF/6JKEen5kp\nYWopoxZYg8sHCoympeY3C+Rs6X/PQrGN0HpibiIxkJiBQ6rJD9j7pjnIJ0q3\ns+aJViCRHxCW5LkMJQ+y5t+vJWQDtzV+mxI50ewO7ZArn1TKLUJdGy+YjccT\npeJt\r\n=7Ipe\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"f443b1f8cf2defbf6bd0d917b574b69b959b3032","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.8.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^10.8.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.8.0_1611333356969_0.05883199416049778","host":"s3://npm-registry-packages"}},"11.0.0-alpha.1":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.1","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.1","maintainers":[{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"iwelch","email":"welchcisaac@gmail.com"}],"dist":{"shasum":"b33f5d38731d6619c5f2979f30f911a9c01db523","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.1.tgz","fileCount":162,"integrity":"sha512-bYHa+OyIKwfS/NKUd36wSdsPIfU8eIS3UDgU+WVshDMfqZX3Rk3rO2s9csGmDZDxGBfrAaT4ALk8bXpO34YFag==","signatures":[{"sig":"MEYCIQDSORqwlS3c3LQpA+KAXVUbuF8ikA08KSvnMUbEjS7VywIhANcDlIfFYkfjr8T5DexSdRluianthf6WYZNH3oC9Wggj","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":417894,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgDwZLCRA9TVsSAnZWagAAqFEP/RPGxC5Dt89ro2R/nnzo\nzNBHuaxQef6HBQcMlqdFsGv5dcdymA+t3FxupeASEGYqx7Lr6+Pu2QM8ZLHc\nJ/gLd8I7Ziwyr+x1cIEBmX3SsoqP8IRPCzI0zbwImn+53mfvM6KqxU32AraO\niv2UKybNyzHGQO3+zAodI41G0CUjh8P3iYqWtgS9d7RwmdMnEI4KCYfxYIhV\n/xyMW7MfVVpah9Kl5ZouHe/F1dbNz3KoopYVXMqTzj7Ae7EgnQjend4/X0G3\nZ2VPLtMAVf6Y1Hv0ttIL+m57jK/Z5t620uqwBtia+HxCsSlqOfsnQqF5s/Os\ngwybXgvtweqjrjzbx36j/q/CU12vME9iREwmdsaJnjW0AqF2d5k8TAddVEc5\n7bRr10qslaR1/3HYrqQRzkbT/nMboU2Z1mzZHM8FUJH68zlhT1Jgu1RVCSix\nPKDv2eOMmoe3Lccquwq344QdOJH8j+JAQb7UVl1DBKpAl8ksjEo7UmIvXV9Y\nBPQZ3FvD3N5nt7qKqibpZdjhICUpdSzCHCGC4RKwQCuSuGeOc6nOsnX3widN\nYVZ5nwvfrvXL7DBsEPHYGiqc2sTpDTOB8JzDXxFVCS0EqNW5H9hTrsZyPJsO\npg3MQEFq+eMnuSuxv5YvL1/kF3rJLzCnQ5GfNthDJOYfCpR5BeHUTAgl280J\nSsgQ\r\n=aj0e\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"462425f648e49bc960fc857598baa70d5e3b14a0","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.1","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.1_1611597386967_0.3992934149261951","host":"s3://npm-registry-packages"}},"11.0.0-alpha.2":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.2","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.2","maintainers":[{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"iwelch","email":"welchcisaac@gmail.com"}],"dist":{"shasum":"65b30cb95b04e8c330c034bb368b8e43ab83f249","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.2.tgz","fileCount":162,"integrity":"sha512-9+Os/PEfoFlny+iK71e5Oju2dJU2ovGViz0IcoIfKwUbOFBqb9tawTdjFv0l1pphaTwuAiIacnqv24HRVia7fA==","signatures":[{"sig":"MEYCIQC26r1KF8/lWpE/5KjH1z7Bi12lb8/QU6bXs/PDFrxB0gIhANruZwt3Odtw8K4exhcFePRWozN5HnCpKALWj5EfuvZS","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":418081,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgEdW6CRA9TVsSAnZWagAA/ugP/2tHMsVn7rAAC+l7+cj6\n3g0RxuMWvbxu1TIsthe43hs+lRHLo42XoLV68VtHmskvqHVUBfG9eU78yC0V\ni9JwNH8yyTwLuSNUwWsl6wTT8O7r4c3tvNVfgm2cs8Tr6o8pbuD3E8rzoS5y\nhm30Fi30r4qKBpXfpjeo0eR1pOBRgPxT1ITeSy+H/piMbnUG3vIk5O6s3Olo\nCO5Zu4zUpqQ/ECcZFj1ySSok0nwxp76Bqy6NHX1OOrQ1aLp1Ub3YUtTyEVZZ\nKH6Rwz5hCIujdjJed2QlwitAn8UwJQXAvxhP/my5IvyjOUT3UGo8lNxpf9wb\nSzN42hMmRXg6iIoSy0hQdjIRrZtbwb9JQImrtAEtR7mBQHzUE9c4QSNJx4Fn\nFckHD2LOXWTy2YC9llkQYWGe+sf2qR2LaMhtYi+78GkA/kkakBYVN/p/HShM\n75AFImEi3RnbfGOBJPPgOGlc0B09V2lgHx522t+rfN7zkwJ66Pqm7Y6PJW0A\nzYoyoqk9egDG44GebfhyUfMAzadGZEAhv27JWZkH5CM9f7S5igPhowyn4zbB\nYiuvkZ5/UgrvEX2067l7RjCplCOEHeZLMIIdNhABOhZL4TssJB3/cb9uDeqr\nra3oHw51ei8r+sSdwnVfShKYV7+sTmXzG3r+I+eKC77AsL9vX8cnEiJ32Fdj\nNS9v\r\n=VYIR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"9e7a25d873afacf251ee3e305b115fd4d74cc108","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.2","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.2","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.2_1611781562431_0.1493308019550348","host":"s3://npm-registry-packages"}},"11.0.0-alpha.3":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.3","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.3","maintainers":[{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"iwelch","email":"welchcisaac@gmail.com"}],"dist":{"shasum":"ec36b535ebb0c5b2577d026aef8af6adf6fbf2c7","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.3.tgz","fileCount":162,"integrity":"sha512-Oo8JDvbrOADmg+W6aMdsdpHfUEKNnNRHg39uhKa2Zgj2tDmvSjwDkLLIaU1s/SL8ZzwODa1AApxZtyWQJcIKfw==","signatures":[{"sig":"MEQCIGy9kOO4OXdtaSUwIe6mAqvqber9oBeC3pZ/pgHQOTIPAiBGnv4x2S4tNBI+58LsuQyc1GsA8ph/gFlVXTq8eT/8Kw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":418268,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGXgdCRA9TVsSAnZWagAAaYQP/R92CKTnauzkwUuv/j85\neb0R5w3dWHjktqhKbm6XQDaovGQoGGebjTqX6jZoqUzs4Pu8hniaSUTaVLbJ\nevYbhW7nCqDCpHSmTPYBENXhvEJ9MVSu3SWKERb9Hifq9V+VNCdt8yPtpmse\ni+JiKzi9DwgEkXEZIFP+4B2gJ6JNFZf2tP1r3128QLHGZeqZj+24mABWd6L6\n+Cuf+kyHOgUzJzNacKg35WVREi0RmNTT2gb09793txWJJAlnDYITMkxPoaDY\nozm6MROec2B3FtxQyhAX4JaIhDlETEO4DReEs49ZHozj58ofbFYkIdHD7O9F\nLIsuLkFLlEcLY/cOyQuYsPkgdJezxifK3q20h1i6gyZw9UPMPjyCXQNcanO5\nKvqc646Tqxsy4E8D79Mp3SVy2/mvM+9PtntJ37wKXs6+cGDCCHqMVAoSMYJy\nS4cH4QW3Bh0GerdPv6v0g6lc9FO7GCaB11FkUPDVebc/Gkdeknry3gmvcgPk\nQ2OKmwoThDezcNKIDk8rkbviQNJlTz5lS37WPU9c3Lmau06C2nzN3hCERn0+\n66XV6lr0hoR9G3tmfNdEaIf3JVfOPeAPcZzcEIztUs6w2tjO4KYCK/EdH5Or\nRU2ge1OUa252nHv5g4jv1XDtq44z1CJ0zM9Srlsz1BjLAxZv0R0mtAGfnAMo\nAUYL\r\n=qbUS\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"6e94c00419b3bf47063b8a374ec12fc50b8d362f","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.3","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.3","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.3_1612281885134_0.6704432734365398","host":"s3://npm-registry-packages"}},"11.0.0-alpha.4":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.4","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.4","maintainers":[{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"iwelch","email":"welchcisaac@gmail.com"}],"dist":{"shasum":"a230f92e11519e757a5ba3609413532f3c46bb7e","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.4.tgz","fileCount":162,"integrity":"sha512-JgCC3MVk4niH7VviDzf38AOYPS3N8WvGxeEF8mSdjNqJT50u2jXFp7iZOKv3AKo40wRGsVlpQVoNg+0MssD7qg==","signatures":[{"sig":"MEUCIQD2Cj4rVymaS7yRe5AkQN6h9KLl8Gh/yBYHwQ8Cz7DspQIgT6LHCs8Fz+RruZk1CT31cFXT109Z8Wil+IWkvPS1Vqk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":418455,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGb7ECRA9TVsSAnZWagAAXbUP/3kcMkMs1IAxqVwTTUIA\n5HDi3Qd5fa4YSqpv0I7U+pzl5gdbfNpMgJou96dGkZaJfN5TQUVjh3VCP2ZK\naIGTaQbjkzWY0wyhnNmhGCt3z1ib9VdPuentlLOuvFdDdfA72Qt7iUs2/jRI\n7jX7FrvZS6I0dvPDM/3RO7+Edyro+NqJMpH1i/2LX/W+VBC4UU/9TYd1qN4X\nEIMMRmxZvI3FLsq3tewHi7eUVxCrmES/j6gfDMJlu13lzECdVY1/QiOjFyfQ\nKN9E5ovSZBjMIx+SowPXjyaxeE6PuxY260MzmLDXy4ZOJWtqGAKOYCNtQxJu\nohA1aLLPl09fveJ2X7ZwgVgFiZJynArDH7XvY3oM9EOMX95bCQuu6H8/RL3z\ndeEFoLl2WbCarN6mjEKtX/KaMuvkH8o38vTEZElloOX208+1qghGtSC8YaJo\nHOw9p7BKEkiXHtr9ZvtmIr/IqW/fgqgCrDpM1f3TtQ+Mkhd7triD8upld+YY\n57o/mqXG+0Mlp2i2FUlM8lwiAelUctGXpzcAERbTGLBnKiie1rGjVYZC8oXF\nyoauG92P1DTMji/DZVUxZbXEZg1XPY/QUWSouimI75aPJdG6njbNGY509nxk\nNrUYTAIPETz3/Qof5qjF3k9nXv7mvThXP8QFlMD79vxvW60KD68IFJZmWJiu\nfaI4\r\n=louT\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"6d193234225a00f0fbb475cd6e42b76ae5e8dcf8","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.4","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.4","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.4_1612299972130_0.6778059577130002","host":"s3://npm-registry-packages"}},"11.0.0-alpha.5":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.5","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.5","maintainers":[{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"iwelch","email":"welchcisaac@gmail.com"}],"dist":{"shasum":"edf0dac2da8aa66cb7849af50c31add1d3698244","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.5.tgz","fileCount":162,"integrity":"sha512-iSSqZgP8Y8867SDVFxDaafaCXLpw3nYcHGsRdQqM+ZZvKAYPmPlIuBM/eb7ISw1uQW4StRsX0FT91M9kjzAXcw==","signatures":[{"sig":"MEUCIQCAzgJYUMOL9zli41raZfxs8PlmnF2M0Kea//B1GVuyWAIgZuBizMjd4aa1PdkeQE3GbTOrzYFeHebbFBOfR5cQEik=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":418642,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgHB6NCRA9TVsSAnZWagAAvIAP/0xyTpIUzUZyFFELCwcy\n+K+6558Lm3pB/8dN9jPp0dDGsi7iuVruNSGsTqzCppGbtXzg/kzXF7FT55J6\nyCJfsWOqoOb3IPXXytCux+ETT3L4qtocnCBMieLfO0AzLzotpKuM99Tui6Sc\nHRKMERLQNP/ykVKUjA74bvvgdYerynbzkmlhvHOTn96vy+wYM1/08w8YcGfb\no9990WOgrjng7t9zHqRxQWy6fyauBURisqVH8RU7WXMZT8OBd2iHkDv5T6/w\nKkNZHs0x82dZXL84Rmq/lxrLtQ/6okISTiyUqv3wI7OYlzJxdPOtnqtr957q\nYHQWZM9b9L7z9f+NfujUYhzY0SyNXhCTr203rBLYMGJHZPbk6fVQbTAfmdX7\nkLnjtAMFGJ0V9+DtINQYb5lhyl39EhkbsVEbAHQBCoEFKr23EHSxry0UNQqN\na1dy5iViJvh+GtS2La0VOkYIkB9xlX1LB0Ag61IdZUMIlgheNHYGbFbIKgxH\nDKNZ9dIMVblFkCMM+ZycU8w/bCShDaQTKhr3IEbZXMcYOW1SvwwioN4ZtYkC\ng6mp3jmzRI4uEnu9l7p1lVsHVx0vFgHHxpMbu5VWCfVVqff6aHqqyVmougLm\nk2iHOoeJypim2jU/ZSWvmZGfXaNllWrFOGOvgD5ciAvfj3TynknJiK5GkpFw\nPPUn\r\n=Wi+Y\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"b72a07839c2de4a0f4ba42340efebeb2bb043a83","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.5","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.5","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.5_1612455565431_0.7897945881927535","host":"s3://npm-registry-packages"}},"10.9.0":{"name":"@brandingbrand/fsengage","version":"10.9.0","license":"MIT","_id":"@brandingbrand/fsengage@10.9.0","maintainers":[{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"doubs","email":"david.dwornick@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"cauldrath","email":"ben@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"iwelch","email":"welchcisaac@gmail.com"}],"dist":{"shasum":"a2bea4a6bf965b425a92b710fcc3b80561465ad2","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.9.0.tgz","fileCount":162,"integrity":"sha512-jaGLGN4ZwpZB6BVOLWr4elDH3LyVTkit2/h6MwtjY8ha+abPkj+lC/F28JehuvVMP+oi4lcrwm08FRIPPH7wBA==","signatures":[{"sig":"MEUCIDW5rBqLc8/MYddpq6N4OJHDY26MT6umhXN7a4e0N5u4AiEA74qu0w/8K4vo/uUczP+sGIBbZTe6HEI4sl9KAlrLaVg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":417830,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgHD6kCRA9TVsSAnZWagAA2YgP/1zHQ9ix9z3AxJTcSB7t\ndL4WAPVfE22bpehrPjgtbVLUSZL3oaNu/wF5BWsMD4cHf6l80vw9jAie6vsn\n/Jz5WUWVUnTBSGqYLkeB3OoVDSogYpwEWRIL9axEwc2ubwfJ02EJyePmT6Eg\ngcQJs4JCacvrf5TgIonrQ5w3wVOqpzMEKuFCncdAbUUiutSMa/wPZ0mkMS6B\nXoqtfWMI0Adk4HMH+KFu2jrGK5CLi4Dmu78qtcaMsY+oCVCrT8DKSpG6JcXJ\n5Cd8MjMtX7EnX/C3SYwGqFqNIO3NQ4w88ZpQuJcN8+v3KBD9y4B68/+s8rpU\nAZOLazBhFvJu2lCRgWbofMZPbc0vI1iogJWgY7kbf3/yssnJDu/LHI5NpqGK\nhYk/FkBL+d/LlKyi4xBfxPkiFmBqKh9d+cCKMg5OMbouiAHfnk6/2b58sWoc\neoK/9h/3BGPDNCzw0JO0P9V+z+6B/mf87Y697onFjDCouJ386Whi4BLUV5MH\n0e42fLqm9QzKa9iNXecIcRUWWXRn/lFpU3lo4jjjgSS1gQb1NDFqxT5dQ3vW\n0xv79AIZtTDonWYRP11y49+zMfNBwNB847qj21SFuRfV5CenDOqYQlcDkO0P\nkgCU6InbyWmvhsvAAkP/vXVT4M3+/Jf8kDdA9Mbr+thdcuk+d7LA4N07yssZ\nlvL7\r\n=OCE3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"744039228ac5f275e11be89ec9ce42fa7fc6e97c","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.9.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^10.9.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.9.0_1612463779567_0.9230677413661186","host":"s3://npm-registry-packages"}},"10.10.0-alpha.0":{"name":"@brandingbrand/fsengage","version":"10.10.0-alpha.0","license":"MIT","_id":"@brandingbrand/fsengage@10.10.0-alpha.0","maintainers":[{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"iwelch","email":"welchcisaac@gmail.com"}],"dist":{"shasum":"f7e3f233b0180f37ab4744b910322a9273fc6847","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.10.0-alpha.0.tgz","fileCount":162,"integrity":"sha512-V68q0D2WNb0OYP7Wmk9GimOouyADQoGHSewRcHVP6q0dJrJBE4a4qglAiSzK7AV4xzKcCmGuBSk7RaP1Bx0B0w==","signatures":[{"sig":"MEQCIDy+VaYi7JP65kPBXexoZtt3K2dDDFeARPArEY/LEe3tAiAA4QEY7Gj2ZBUTyUbtQ3e1QQPKV+WjIbsOcF6f3uy+2Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":418038,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgJACGCRA9TVsSAnZWagAAeA0QAIEUOuDLN62C60CJTd1f\nqdko7qFUL2vw4NVvZ3Srq/qGfJTyrnUa6sznFQOFgwjGl6d3PtiJWRM7SccJ\nu8Zj1CVxAxwgDHC3p5xbsAJxUmMNkHEKvOdcnMQ1Za4mzv9O/uVjP1ogPeBp\nKVOGLnK00Xk/7Y2AE7c6mbcpzo9aR3VDdEOu2X2sHfUspp4w06IDvS5kAjjU\nLTlhbZXG+u5dlmif6+FHty8jZrGFNVrLBaR82wKi33R012dcBz/pQsjG0o3W\nVRwfNd/Zbu+F2AehhAcZMCBvI3EoHsjAAUs8sOt2Yckf/2Klr5zSk//abzcM\nO6pdkicSLNXn3V5ywGUywiChRnobtjsKgcNr3ga0Q6Cx6HuYko17mq07DP+t\niCVC2xsc8T9UH6W8nuG597o8Uri7abm1enZBuUOAyjV6h0DKWXPb2KsIPfoX\nV1qp4g57IpLd4yKQpFzEqpe0VYft9uTZGXU8J3Vlf5DnOQFbLUukh+CqLkMt\nPwNfjxc7WIZXlVLGp4oi2/nAHD2JXEnxD0CApbBSxhWPvnpKTdsO5kzOM1ny\n+Bb8zQPHIWAgNgDToOcQVK/LnBFpavp65J8/NCIWJznuF7/WkMnDVI1SUjNu\ndwZv/mRu87Z9732t41EfkTlNHtb23rOs5JIl6kfFsjjneduV0QgWOh8BnA7w\n0nob\r\n=CASb\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"4a99728c0c0134c86423b2fc2318e3b16f3d8d16","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.10.0-alpha.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^10.10.0-alpha.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.10.0-alpha.0_1612972166026_0.9747350808493205","host":"s3://npm-registry-packages"}},"11.0.0-alpha.6":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.6","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.6","maintainers":[{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"iwelch","email":"welchcisaac@gmail.com"}],"dist":{"shasum":"2af840eb478a955584c7929db688376651d1e4b6","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.6.tgz","fileCount":162,"integrity":"sha512-kkrfZgnduOHO9B9pA5AodV1Ijg6hqnbgkvIElL4RVA/HZXoYmEIAkJgy7phheJcPGFjTQjCaPrLSrZIM7Rd0yA==","signatures":[{"sig":"MEUCIQCu4fHUOAhHkOlDZ+Xqdu5VBUdvaEYvkE+Pq8xj1Rar0QIgEKaaaMFQsHbB6rha3u7U3Urp1LRuG7qW6ppPQ+EafNU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":418829,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLBPhCRA9TVsSAnZWagAAAdoP/31BcAjb73CFf9LFGHs7\nJhldubkNjDWSCJogRr14Ga7z0CaRUcm8wRD2cRpXQBVQGB128lxf9quPy6Q+\nyh/CzySaa/xM4bJHaEOwSZGO8UMbhhv5q0X/rKWIFePkoxozz7Bkxrttm4/C\nzfd/G930pzTLSwGgPgiK39YDhcWu+ZUEx03/m/00XGXkbLn5wq0dpGRxuj/9\nN5n1B0YS+ysLA7VpcItQ18TUunks9UdsmaAT7sxRNsnOAEBg1KAEWAlTapy3\naz0rUE7B8XkQfkAfbUgYmAvOV5fbpvsazYUwMgeLwYmuiMRHSVf67qPST5p7\nsllPzZUJ9OyRnMqnskiZdMeZaBArXp8ksp4Vj8HP3O2hUom7YBzsIRtZ5lVq\nb+Y/u7TaXSTmSgaxD0/E2ZvV7HtEHSNaWclyXL90HBsSJHqGHTCkoHSOTbpn\nMuJvEJmf4kdh4ZEP0F6g/cUVNO/ErQCQVNEMF/N85xzEAWFnn+FWn00q/4rO\nHHdDCwn363q0v/9eKY6Xfd7dzE0d9JsmqvAv7gY54VCrjGsZbisnLoPQLXeP\nTyXv4HQ2pphW8gLoSE1YRLRY0qww4AVfW7uob+WwrYlSdUdHlRWiHV7tXb8l\nhCriNuef5zT+v2a6lqhFkfrbIoIcF3XalrIYAG2oA2TnRjRH4XdnAO4v0oTM\ndFIS\r\n=A1KC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"dbbec7ac0c673e3d44b598ff38477aa6737c13c9","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.6","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.6","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.6_1613501409148_0.32637166932388517","host":"s3://npm-registry-packages"}},"11.0.0-alpha.7":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.7","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.7","maintainers":[{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"iwelch","email":"welchcisaac@gmail.com"}],"dist":{"shasum":"d7bbe1ddf835cd53419d560aa459f1c0ff145d51","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.7.tgz","fileCount":162,"integrity":"sha512-c2zfoBC8Z7Zn9A87GUz6xModkndSSiaI+jifMw/mMLvbF8XZymEtve7bpz+a4uxu65x2bygD0INKIdefkttBkw==","signatures":[{"sig":"MEYCIQCS1KjnQaLDwGqRmRuavP5XZXVdvQcjvK4zrwxrY9eR2gIhAPDkqEZllvl1YaTRe0EbOOCrfWtcvdO57nSbc1uilUTy","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":419016,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLDXmCRA9TVsSAnZWagAAt0oP/R1YWpqUc+kpeKq2w62f\nue8cSngvNNVrsUzEO92Wu1OtTAMaIF/3NjjzsUWAv8ksjadbAyGjcDMvPi+R\n8aP8z5RhTSBVWJLlhJ4dMgE0Pff2G4CltYxk6kYq+qLjmnNbzn25zQsZtPmE\nULgZ5SZgdAdyDKnbfoJW618dalL9jev7WzpBX3NqFZBvDfa/M619nFsHL+Cn\nQAAoBP5TuN6tFYC6F9ZN0IeMWUJbGF+O8S+P9CsAlQgcx2o04uriM72o8I8I\nz6RiQ9lC5H+9tcqB9ksZCZM93yGuKyvfKlbKU2eZPUIh+U3qDWBw/u4oD4lu\nj2RDQbgTFpoC+L4MQtHnu01enAxJMBYdHMOUPd3yc1UU/+PuSTKtvcV6EK7N\nGy5Mzs3AEMYfQXMBkKTosSvk09rCOxe4cBHpXoNM/uVtrnxql9isWJeQaHdA\na7257BOdrVEgz3gJFZG7WVKIiJGi0oiqHrHIwzTKe1P22yUHEtdgaXz9W+hG\ncU9NWO521LS3oy+dnYI404C4Mku+ggffb0siUie6lWQUL8+1D6s7qzjcfDdQ\n+ToLKxZ6n6jxVp5aO0DbaFcNX6gD9H9SaIkg/FkIroerFfW/5BIXMN0Nw8ey\n7lR/vjCagkbGKnDNWpwOzHBg/JH6kzsUnDCnYUt95ltKm9akvRsUjyo1b2Vy\nvLj7\r\n=ixIF\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"3948b7c2cd295d131550983ad76e6401a7ad8ca8","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.7","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.7","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.7_1613510117618_0.37579239144717813","host":"s3://npm-registry-packages"}},"11.0.0-alpha.8":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.8","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.8","maintainers":[{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"iwelch","email":"welchcisaac@gmail.com"}],"dist":{"shasum":"be3be0ee596d6594b2a98d1417513f6cd497e123","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.8.tgz","fileCount":162,"integrity":"sha512-lF5bCMKLCkrEsoJDEThBoxiZqhTCpTgxeosgB0l6/04T7Agpj1QDY24gSCnfLP9xSUg+l6CQOFSPdU+p4jjKww==","signatures":[{"sig":"MEUCIQC0aOjnPx60XcnkAiRQckzo3hg4PFt/F3+zf0qQ4BWLtgIgCcLvCl8B94hYRtm5xRiLiqyOZV70nTFA86WQZ1WXWSg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":419203,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLEzwCRA9TVsSAnZWagAAQh4P/iQ38+1wfv/rF9k8mwlz\nTgo9TmUL1I//dDzew6W1yhYPKaT7EgwbwD/lH7KCdltF9sF/tGFZ+Ibe1+2R\nnLo7Ehd3DjBUbebxX1BYQECFEqsHNUU/vKcI2Ft6a6A2K1A9ArK61U1egDEE\nuFSpt4m2r3QEqAnxDt0zk7fb1PrP+OfNplEWZ06KGuFJEBWtPnkiEvp6oLkD\nqoqMA+GRc1EVUGAdIRroBXFn0nB+Eb+OMWUqMp9dj7n4sXtCteRuclRnP2yF\nL50u4caOMQt02OUMWjLQA8775/MAAmDFEeFcqAanITNO8QmGUJBI1PPPoSn7\n68cUsqXNzboBZ/VdzD/DjIqn+byhX9iR0KsVrJI38JFY2pRvNvHdwm4o6P9r\nhzq0N4NeyQi+4s4Ak/1i4T5NDOia/1Y+I2K2rxZv3/hHD2Y+qr7gz9mSkvMN\nj8D6H9vtTbvhcjH7kUH5R6EBn9ll9RnuqgJ1sgGmbOets6ZC9hArc7J2zR1h\naaUNesXgObT5BwBmEcQxIfeGoMc5Fcf3DenPxkdXLmXEp4B4gOCX+yOiIsGi\nOTCpUhR9SceqqtPzl0GjfWjeXyBAL5MY4htrVnkErSSu4ATzDO2myIKtUzX2\nVb0sEukDVqFWpfLv0bZMbG0JDqxo0/sRoeSCHFqU9OXqEYtFa/TKCJrD7b9p\nY7P9\r\n=F7Vk\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"be9edebe5242a250d0de45eedcabe92f5902c5be","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.8","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.8","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.8_1613516015908_0.700387161868731","host":"s3://npm-registry-packages"}},"10.10.0-alpha.1":{"name":"@brandingbrand/fsengage","version":"10.10.0-alpha.1","license":"MIT","_id":"@brandingbrand/fsengage@10.10.0-alpha.1","maintainers":[{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"david.normington","email":"david.normington@arcadiagroup.co.uk"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"iwelch","email":"welchcisaac@gmail.com"}],"dist":{"shasum":"94523743b4bb36b2f31fa7536158bc7fdf11b6af","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.10.0-alpha.1.tgz","fileCount":162,"integrity":"sha512-k6BXSSZY+QBpQ7LZ9nRajFACKml6fmu1Zgv3YyyVWwTlQ3l6FHl0uLQkaZIRQ4Fq2sM2pI6jQGZm2xUfSJXb1Q==","signatures":[{"sig":"MEUCIHGqQYIH5pXjzL1Hff+5HlSA0W2G7QqeONMAOWK6xXqLAiEA97PxLa3AjJ7V29uwbIpncWRWqYNBwDxf2J/8SghYrI8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":418228,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLZYKCRA9TVsSAnZWagAAZXUP/29Ir6RJNhtmKL46NrgI\nIuIqyKJQ0WZZLM2igA+3mZAYthPnFZW3mzRUhygrnOkQMKaAwpyPh8Q/xzPM\nU0dZz6yn0kLSvzDkvmHr7G5ge0GItrJ992KbflZfvCTQTV+wYAGUkCDi/fh0\nP4nKTthh0jaYX5lW7SLeX+nVMlzNT75+T/YpjYIDljQ8JM8mpVxb5zUMWXuH\nWWJD2EsdDkJXNH+lywvt0w0NVF4DhUe4L/vmJlUCRK36LY6lxGUXlaTMY2Od\nLC5aBbqNUgaY+GHryThILb1s6bjfJT23kGVY5BgFa9AkQENo492q9JLUgUN4\nXeTvMectSj+Op8hBzIEVm4VLRFbH9PdyqELarp5lcvQlYcxk6n5G9vQD/5J1\nvqwhpPiCySO98uj5Iind0cyhxwsIMRmUrFCoRXdHA6yLnhpjwjga4ZRsktpj\nzy/zSAkb4VZ70D6Bd+DB7WxaPun9TDB5NHIgiUNnC3iF0b78A9Hn2sMig6Sq\nFm0joMM3GVKbogEbxAZt3AmI4+9cV1K2296SV3h2gOyQ4Gow6D5eQQhBa1Dk\nIkNHbQZuJATIYz/k7eKQ2n3x8puMRjMxxCFESDHbXaxxZfc0tTw/TRO5cgSO\nYP+aSCfpJVHzvrIbKPhmfeUuTcBs1w2CNDOoRqFyAc7fSd2+uNvWMdCYHqJd\nDJer\r\n=2woJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"376c61da3d2b14afb4b13f3d92b9e62193110786","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.10.0-alpha.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^10.10.0-alpha.1","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.10.0-alpha.1_1613600266081_0.020545073087159915","host":"s3://npm-registry-packages"}},"11.0.0-alpha.9":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.9","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.9","maintainers":[{"name":"jbancroft","email":"joshabancroft@gmail.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"iwelch","email":"welchcisaac@gmail.com"}],"dist":{"shasum":"76ab823ce48df86eb8b6324adec35678d724444c","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.9.tgz","fileCount":162,"integrity":"sha512-VAeFUX2FBOV+mpgXCMsNNpE2sZ+IXN8SSOBEHwebZRuyogAEQJG5VxQ58m+1h0bb/zrbnIC+2/S2sEgTrYiu4A==","signatures":[{"sig":"MEQCIHI0NSrYipkhuPEFTVcJW992MlQ7E5U/3o5iIGTMCQWZAiAtM4p9U2v7So+PS6Xjd6RRrk5Pf5swYAQMByBzo7B5Cw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":419390,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgOCDLCRA9TVsSAnZWagAA1WoP/0xBmf8ybpY3u6jQuqgm\n/odr2zX4UsQALDAplczynGO1BWFByyploGyLC/NHAuUkLLYmp81XgW/X4TuB\n88Uz2H46Rqz/2L7whJAdTktsmv8fY0wODjvWvWKVQiHp91UIOn50/Ft/BPcj\nShP5dleBarzg8APy7XS4oHlLFjImwnXxT/3HXqJZkFR2MPurQhz2x620hYyr\nqkrPTginSOsfr/AhdlsbnT/d1szTKST2aM5aLOE5JrJmk9Ytliq/XuapcgTg\ncSAjQuP+5vOR++A3CxZ8ypcNcUYM3DkDZQaJo4SIOACipYEdDgRMttelKcEq\n9RTSOzB4xokO9tsuvFSPC4NEnxqy3GfdGiyGy+0RpRuYla07DymNsQSKnv9S\npPJAL3q2YnOGuG1N/N2eBY0VSsX0H6TXIyfzkjEEgsqSnHa7W3o99r/NeFzQ\nDVZL+U2jN2YDKHEX3XTr2H0iPReR4qtWqR5i32YcaZYoTyskc24Sq1s92p+3\nFlN+kA2Ad81Jy7j2IiqOzFS98PkQnKHPeRcooDsK4nRx26ViKnrni7q0CUd0\nGEzVYINxPS9kTYn5Wz3tM2hN1xIziP2xzsKnloS+n5TyozT2zpbCh6gD0sjB\naq7kyj01LSuuENNaf2uSgIqidYFHkef0HKNjlPumwPHCKaEY9JaprHwmKMfO\nO2jm\r\n=/vH+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"ab20809aa72bdc20158f9a5823694b5e1e1bdaa1","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.9","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.9","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.9_1614291147004_0.7643642542184526","host":"s3://npm-registry-packages"}},"10.10.0":{"name":"@brandingbrand/fsengage","version":"10.10.0","license":"MIT","_id":"@brandingbrand/fsengage@10.10.0","maintainers":[{"name":"jbancroft","email":"joshabancroft@gmail.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"iwelch","email":"welchcisaac@gmail.com"}],"dist":{"shasum":"8e09f928f0321a4e347a381bb75802dce1ae9998","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.10.0.tgz","fileCount":162,"integrity":"sha512-FKoLV5y+zCSV2OyK0+qrwCfSQ2q1c7P0Cfkr/wdrdA5GIJztY8atpAFHg8rypxDXh1uejHHTuW/BxckXCtokMw==","signatures":[{"sig":"MEUCIQCINLfxbYMFoJ1X+Z3dJ5s0NKJElZCRp2dg2nViPBvtiwIgWUcHnRxwm41LOV01cppW/nEIMES3NP1m6EIIpNIE0jk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":417998,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgPmGICRA9TVsSAnZWagAAnD8P/jgsomZsk+ePtA6oj/GD\nwOSQVu1+6JvIkrpSxTwbnJlAQIxOkwvge9+l7lxKPKMiadgN+psz4WI0vjJz\nRVfzKbwHX5PC+e9QKaXGxywAuThq3ZvuAbyTJfnAq6UwGpkmq2xNXOBmi6Yq\nbKBGlh2ploMgKElCqK51KGXGWf3SPXYD8q6KCGeN46Ysk3taXt62UpaAtDFD\nEzLywEyu46yqSlY+FA5gMuNDDk1IHoh5l81lFxPXqVQ1y+VcHmdpzqXw7HA+\nDvUaVy2I5NGwNu3nR/3Fs2zr+wEiswpCMEa/4IqrXhKKQUhUfP8gFxt2w167\nEkRusl8xjBkZ8wL9Wj1hA5+F/sdGpZ2b6FiRDzmGQBI8F/HPD/qB+Q+LgfI7\nGEArKWtXr6Kng48yLkcbdfXHWF+aLj6QrENlgOVd/Wwyd0nUYlrKrc3kzilH\nRqunY2bDmoED1aiiZ9LyFwhzE8Y1+okPzeEAofzDHezPHTuGtFeH9tjrjghe\nZJBT73MuV4OD9zjcBiI9+Xo1PCOpoIoNIeGWtpAi80QUwBwlmBitc08wr9Hp\nGACqFGFFOoBwO0XR+bL4bt5jwpaV/OO4IP8gLI5WAu1TNC1cmz4jAabDtSqG\nnohnL25rFAma/3rR1LXlqVBXkd916LGy7KDyNu4X604XxJhJtou+UBVof5jn\nZX21\r\n=QpZW\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"a114e360a47136ceb3c45d1b20cdfcdcec57cd0d","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.10.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^10.10.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.10.0_1614700936388_0.3468006931815919","host":"s3://npm-registry-packages"}},"10.11.0":{"name":"@brandingbrand/fsengage","version":"10.11.0","license":"MIT","_id":"@brandingbrand/fsengage@10.11.0","maintainers":[{"name":"jbancroft","email":"joshabancroft@gmail.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"iwelch","email":"welchcisaac@gmail.com"}],"dist":{"shasum":"89772a7b36d6f1b824f74c53c4d2991ad107612d","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.11.0.tgz","fileCount":162,"integrity":"sha512-kUHb/jSmiWw/S5XogjKCKgIYTckxLKYjrGZotrXc5TgTC+AunHR6BUlfWUnSLS00LWEO7D8gGIqGwBRpuFLqfw==","signatures":[{"sig":"MEQCIH+E7RFVnJ8MlhfPA8sus0kcvd4yQ+dns3UdMpfofUF2AiBGzptLvNzsZHiLRDDL+Osf7OICMDKdQRohkM50QZs97g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":418164,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgQml/CRA9TVsSAnZWagAAOOwQAJD4pqEWqAEZ+D0naXy/\ndqWYUAI4VbXxWiiaeB4op5hvAzDVg6zmiuXgSoig+7/CggwebkrReB3mygKT\nDJJdsBARmL/shdMdV/BYfiFpsyhYSjAlTE5Vh+LkYonw8shpc11Ku0JPXeOx\nyDyhteihAHkAi49dltRLbS+tHx+6iXW5+RP0lT2GNV46X3PFxLdZAtdjzJP0\nh5FeGgIMhjuJ3cFG7IyEbLl5CnzR6f8l9eGYygCMNZgppU7UH5I1c880Os7n\nHjV1CDkxBQCJTIDgjekYCRGFBO3lUReOz48Xl4aOd2dtZLV+4hRQ3B06hPgv\nghKUmOVUhiXOOOhFUNZVDbDLnqlWSfn0UcFEkCqw0BTBdk8pAoffA5d9FVXm\n8PSg5braa7uTySaoBecbuUvlgVcJue+emxokF5ejTjltuu2pCWkK1BoUKniX\nIrI4ZvwBSYRcy0QryKdv0szKoHumB2EOOvUgniQTz3Gaelenb58rv9hpAv7U\nSUVUweMozhy/YJMcl5cQhoTHAL2UKl/MofK+4eEDcRLprcHrEHCgrfB/jTQi\nryjFvmBOVZ2rbfXLG0I5iGNZAeAizH5k9DqPFotVDWLco83z//N4nIcLHPq6\naaLimcoee/fmUzRRDv8ALUgnovkSJ97/VvfnbK8FKsJGtF5RF56OJTYYMari\nEc6r\r\n=ujW4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"ff95403a9e1e90a0bdaf314741bc0553c03e4cac","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.11.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^10.11.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.11.0_1614965119315_0.05648398407674504","host":"s3://npm-registry-packages"}},"11.0.0-alpha.10":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.10","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.10","maintainers":[{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"jbancroft","email":"joshabancroft@gmail.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"iwelch","email":"welchcisaac@gmail.com"}],"dist":{"shasum":"a85f3d41ffe557e300a10cbd0eb3c5d7a0fbf904","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.10.tgz","fileCount":162,"integrity":"sha512-xeqy9F6EKJGBgXNtiD0k4E68Euo2YrlcP63T5w4cfQM/8lBcdXkngLBCw0owkpz6Uz5gWQMwf5tBgkUdbzbViw==","signatures":[{"sig":"MEYCIQDLQGQ7/xtjlec7gVu+nAbdswvWp+GTV5H5D2XVuehRqwIhAJ5pps1G7quMsDe8Y5RfqCRs7adX7BS5A8+9ULsHL7DG","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":419582,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgSpZMCRA9TVsSAnZWagAApckP/0DaE1ibC1D/Nop2PSY1\nsAt2Zg4kq/X7St/FMc+oKxNwDr9HbimXJy3HH99/B59MSKkZCl7/c05JV3lp\n/IUPdFnF2nuXNDJ2IC5e4hj74XxkMApmaul5YybIQWIbCtVrysGGf01e73u6\nxGBSBImYh4pPiQZ9eSFzRXE646B2nZuglOTzXnHIW/KRc4t+xy1y5kTtDQ6x\nKdt6EyF8k1diwGRK02nY3AWtpJuqPYjEXx1Hi+/lLz3xA6aZjUy5BmB/71Ah\nWCJ+8etSh96P9a3CPxcmOBSTOuTpq1QVuNGAFdah0o9yRRgXQ8KJq9k5szvg\nGisQwhagbxzAk/uJVaBbEHaV7ssqro8VoLIGz7YHyCS+STDYoB45w9TdS/TX\nX7EPku3caYpW3kjeNdnkaUQJfHdOAcfk00Z21k/xoUypjXtivT5Vp/i31Kuw\nAdhAr6ytpDI6IBaB58PXUp5xpZlbkaBeX9ZiN+V6I+DmdGdxxkYkYoH1A2ON\nYSGWcj8G/tzOqyiql3vAdPa7bdAsnIoJip9ETZKAZdYvFlQ2mPgVXQGz8Mj/\nTRAZakVSAZ+x+z1FRnqoz5rKFcezOqW4V3Ov/GFsM91+DjZrttxc/6bxEKfG\nxjYL3FM8xhgR3RBzovakJIvL5DT67YMDQLeVkJz8hR+Qh5c78ztImgmMjevJ\nx8Hs\r\n=ccTb\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"3b393d8c58faf38bb4a4273792ae64e2f558f27d","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.10","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.10","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.10_1615500876013_0.2555913338826086","host":"s3://npm-registry-packages"}},"11.0.0-alpha.11":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.11","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.11","maintainers":[{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"jbancroft","email":"joshabancroft@gmail.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"iwelch","email":"welchcisaac@gmail.com"}],"dist":{"shasum":"1de50ec4dd672a599c5c524ff3a991625bd17a8a","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.11.tgz","fileCount":162,"integrity":"sha512-L43bQ0phY+mJK9YvTi8N6ow1U7sE0KPFMzNx9gyp3OkOCLMTtYGemb9ts9YYHT8ESeoF3dzOCrPZsBXRZudH+g==","signatures":[{"sig":"MEQCIGhdgx2r8szU8oJd2tI+nwlhbjJ2SKJEaBVbE1X3vYmWAiAq29m2V9nVlqvNCrE87nFhw30kDzq/OpgpdYDRrw1YDg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":419772,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgSpnXCRA9TVsSAnZWagAAO7AP/j0olnXJZGgwFrStjrwj\nONmCVFhe7pPBj+1p46ZY3xhAs+kBKIwhIw6QcKhfYyiuy4q3J18dpoD4bw5v\n0cOuchp6PzHD+Se8cktg62i0W3ckf4ttDEEfy/NjJqIO8Pj6/aVCOd6za9Xy\nhChZMG1yu4VE3lvPLhdPHMeZyf1nEbQaZ1aM39yBlT58ZzFL1B5FO0cY/Hrc\nATTNffYaGfE9JwVYo3ZHtUtdj/UJawrY7sEu7aHQszqcI/t07ZrXC46gfKai\nSWvmTOwSh+VsOkK2tpIXawlqGGRGRuwXlBTgBBBt5JhEiE5xw/4Tyu4dlp6U\n/VwJ9tm5FI/QwlgNsCDHsNKuxAwRE1cdYJkUComHg67aSl6CM2iyRX2JisAl\n4Kk9izzSHkwX484K/TtVo6/gnvgxTKMOkFkL9/x+ZyZmIvf1JfvHpDbEn9cO\ngWVxb7NZAw2losSI8wdN4OZFf+SbtRCSLweMy6Q8BZWdPBpKPz6ThY07uwkJ\nk3Ger8yfPev1cE1D+FmT2g//Dws5AR2LCOtJW2gQOwX9HWxvAZG+lfHa2nOr\n83nArLU/HJTxIet07jSOZG9y8WwHL0XAZ2LRdQp6tjLtwK6eTQvAavODTvB/\nUt+rP07Vc1JwNLd2KTGWqZdXGK+kVdaxXaE+Oc9LnadiW6vyKtKGuuK0E51C\nskP9\r\n=HDNg\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"b30a6b3d886c14ade533ed47a69e897aa579c53a","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.11","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.11","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.11_1615501782568_0.952670255719033","host":"s3://npm-registry-packages"}},"11.0.0-alpha.12":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.12","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.12","maintainers":[{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"jbancroft","email":"joshabancroft@gmail.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"miraestilbb","email":"mira.estil@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"iwelch","email":"welchcisaac@gmail.com"}],"dist":{"shasum":"6d1edbd51a15482b7de4dfc825c5658eba803e48","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.12.tgz","fileCount":162,"integrity":"sha512-9diRfvzV6G/cd9MubFvn71r3q8lGUbOPfyX2pulZ4dbHuQJgoT7ViHfG4MrdhGNpyeYe9AnK2q9fw/15cyVBUw==","signatures":[{"sig":"MEQCIGgUa3UBEgNdzIJ6jdQ0eGS70EWreVy9ktkm5bNwOdBEAiBBMMJAPpKyI9MfLDuo24gOFWifavWhGQbLvn9q8UD0Lw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":419962,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgStstCRA9TVsSAnZWagAA8NsP/2nV72mOdve9Rgt7wJ+B\nE5r+w5A7KwILnBW0O6kM65pe6FFdKYZNWjFj3FUp0+62Ys506nzqF96cZU39\nG8JZ71RvgZD4eYyi2oSFKmD+pmBRJl2ccC5BmnAggUDaR6qRzx5emlgvpoFd\n59Q1z4Gpub0v/YArDPCWew+33RBSNuJGRij+UZBILi15lH/pVjT7uR9LQIax\nqOMerRDaYGp4ZvwnN5MXzgbuuaP5SSTw5AHs3kuEunnODgbwlYgE+/L95FX8\ndsH+cy67K3YWWAnrF3fowEhI2ijFtQXgDLF2fd+M+yvcdbhwi7LRZMvVo+N6\nzCA1PO9OQk4dLV2AXJTbbJQbaB/41UaZu5DPAqv/j9dVScAkYhGKLU1YNYSc\nAx2X65OOddyUBcrmcit5Ll4utWjrjbeCuTPBDTQkAKdpqyLAO8rki5s8OBVz\nXbcJjuLV3kGKOY0XhqyknSwBtvnsH8Yy7+0t8IPzehHlKBnUyeSFrSlHZvaG\n95bj3qB8RFk+txCQqbb0XWLRQGUynCSadGOT10JqECnsaL0qdOBvHyfCtnTe\nc1XSJrFeaIFTyEBQ/QKREjL0K3BPDUDlV8zMRvg8EkEHt5x8nL18vMWIH2g8\nSO8kVX66GHOf9V5EA+VmKKEjeKVwgLq0DJKeugxfr6U8KukRJWJAVgXo6AbR\n6FCy\r\n=BARa\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"f20d118dffc292bc0d4ff15a101c84080d03d7b9","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.12","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.12","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.12_1615518508630_0.22467103650770892","host":"s3://npm-registry-packages"}},"10.11.1":{"name":"@brandingbrand/fsengage","version":"10.11.1","license":"MIT","_id":"@brandingbrand/fsengage@10.11.1","maintainers":[{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"jbancroft","email":"joshabancroft@gmail.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"iwelch","email":"welchcisaac@gmail.com"}],"dist":{"shasum":"8a406a5660642c0b7b9afb781fabb97c00b6e152","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.11.1.tgz","fileCount":162,"integrity":"sha512-F7XbS9L+Makk0NwWMmzH5rXzOYF53aSPav0wwqKSp9+ha1t/Axj6DdP2+yAJQKrxzeyQ9VcXaHjJyVXbGbxCtQ==","signatures":[{"sig":"MEUCIBtOl/u4RmnoFX9aVkfZ/wsh91PzlYVarsg7D+6FRhYGAiEA2ZsAK6cNHWz5CJuUKABnlkr3VAod6MQCeu1WM1WvwcI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":418331,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUNVLCRA9TVsSAnZWagAAqoUQAIN2e/LbEQ2gIxJahYAo\n0tx2PyaOUDKa9E0tkETtkA89X2zmjLjCUQn1tm9W/VILWoIaEmyZ401Nu306\ntxZMmDk0ZK6/NMe16T9wevQLNtgKAMNWWZxwKqrPqfimOgiUnvHmXi1+FMQc\n8SwLBgsAUqNhZ3VosMGBUEt8nI1ajKZcPeLRl2d6PIOaOF6UvLigCDAJuGal\nLPb8escq2K7AS0D1V8SHsq3haVlGt11XMoeboQQ5HQSyTDqLckIF+zppjdZv\nwoQnYhiAc8cs5Pr0ltXGla7SJRR8rdUl/FkWjglHwWFkAqrehYe9m7RBOE08\n5jgtUMMFzVDy9rZxDg3zukfZEkjTh+TJxP/qbe5s7EG8/aBhBQRVg9GZfW11\nTafqcggUVVR7jfZ9bYGK6DV9HTSnMh/zCfIWi4qk1cx7RpdwfD7aarss9ofc\nuHmcxjcRIZNgiW5eeKIbiIfcooWR1LZFj0IYMGSDJ5JSo2+VHfDyBCdZWaJd\nKIzmwtNFj7LvSnZEjHA6OUf2TqaFnNukTYtYE+NExibJ5MicxNDhPLto41+1\nd9W10qUBIyslH+i594xXyFB+74PE+CRLvJt7rcLMIvQV6TkaPMEkgr2d8RS5\ne9B7urDoFR/O46oK552+4SGE5IwZ097vDWYM2yHlFbnsPi+Wz3e/5OhRVwUl\nkq30\r\n=QbsV\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"1b5256c4a6fddb89c82397b969000dbcc4c9fb8f","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.11.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^10.11.1","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.11.1_1615910218449_0.025570077585613804","host":"s3://npm-registry-packages"}},"10.11.2":{"name":"@brandingbrand/fsengage","version":"10.11.2","license":"MIT","_id":"@brandingbrand/fsengage@10.11.2","maintainers":[{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"jbancroft","email":"joshabancroft@gmail.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"iwelch","email":"welchcisaac@gmail.com"}],"dist":{"shasum":"b6f040fa0bfda62f5e80fd59f001d5daa50ae5f9","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.11.2.tgz","fileCount":162,"integrity":"sha512-KIkDc+UH2dFfbZw6c9KOr4Ql6H6ZltWFtKUGeBy+Fir/1+qwVGP3v+SyUOy8VvNjPfLB051SiZyT3WVPDX+iyQ==","signatures":[{"sig":"MEYCIQDZLUnjAcPGNokzHTxmM2//LkDVIdNG02UgTAG458S+1AIhAM1VqeIv+2HlqYp7n+muo16XWFCjnwtSdjENovZBV6/b","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":418498,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUiNiCRA9TVsSAnZWagAAYioQAJz00Ft/qCLEOhqpiwjH\nvgzf7tq6KL5Gi5aQ7/LCpeTApqQlqGiNDZAwgMKKFzZqayB2bNoEJZ6VrPXW\n1XxYGzeX/XU5/muKO8wA5g2hClPmx9z2PAM3G3Lgw5AmqaxDG+i2MUcP5ndJ\n4jrLcjJ/07XKtHDXyr8MtB72GJ4xN9W8jzVyToEQ1LbhNcAjHmoKMeXR9Zod\nMhdCumb/ysiZekmx9br3U5v5gfYrYxhuM0EY9EWIVROrQ33EfqPcKsiSafOG\nYfXuvWsHSzdAnXzr/LhBlvfN4XY4qRBtdvwZnLiDLRy8+iww4ISW4frXGqxi\n9vG64Pj/u6Pgwu846T7Ja1/K+op9oMcy2lKgiW5rODXRBjl92mqcjbLRPVTl\nyMaBuKmHiCK3Nrz1ookg5zz6ph4birZbkKV/f7aRMyMV53hFzwA3yVssKcFX\n9Lkcuyrsxv8Md8Tt+NC7I0z3ipvQxSXsC6VG0dVX7YneAdSOCXQMz5brJMBT\nY26Lzi3TutknLH64dLCYTS7Shx5T44Aoa6U2VUKlciWHNyljh9XI30TV5HdS\nmQlXbh+nB9sT2JxPEDixsaJxrzbvHZ3LB9vfyh5CDq9SDollN4tk5moqyBJu\nPk1h5rUGyfRKy0fiVosf5IZYKwmYFex8S9UNquGmdUZ/rzk5zyyVhInBiBGS\ndlks\r\n=C1rZ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"a82b9c999912e32095ba50cdba67708e25a495bc","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.11.2","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^10.11.2","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.11.2_1615995746115_0.8303167423938993","host":"s3://npm-registry-packages"}},"11.0.0-alpha.13":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.13","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.13","maintainers":[{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"jbancroft","email":"joshabancroft@gmail.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"iwelch","email":"welchcisaac@gmail.com"}],"dist":{"shasum":"612579bf2310213762ce6c0b44739ac459c0f0cf","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.13.tgz","fileCount":162,"integrity":"sha512-3eB8I6QLk2mwO2CpjxhcZGALBGSpBp+Zw0luvU+0s172cPh5CUFW6RRWS8tcHo+B4s77UCvLAEL0qQ8O2lQvEw==","signatures":[{"sig":"MEYCIQCmztu6c26dlPonQwRN8tj5xR7+rHZ9hmF5JFNxwVFOvQIhALgZDg9ejpVJbET1RBQ5TyQyT6grx+PMdzJ913E8OZSm","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":420152,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgVPG3CRA9TVsSAnZWagAA0NAP/2JXQxF9kf7rA4p+MDx4\nBSmMjmJltbZChSQBRrm7umF80pu/RZIIrPoZDtt473oUrl7N+F0iUMAqFB73\ndLxz9+oUqtUtC2EE1PcIfgEwjEuQNGgr9aoc8wzQ8+beRuAxw5n4U+Q8oUZp\nXBVoeb6zj6dWCMNs49ChuacsZQWdoTrs3xB9F3zXPYBy/Fi+fo3ItUTdVmKt\nCWnbdI1z08ouBn1l9G1otZfkYdRxNX49XW7CnoGBfn7FYy2I8z8DmS23ZJKL\nnGC2NTZ9LS9QYyDETSWjiW89mNTMsZhEThlczHtenCoAkrdkwKb5jP6GXfUE\npkHghdJCu4YG0CHEE0r8gjt9kYsulWUe/r6pwOq8rsZYiSXc8fes+XyC/1/4\nHl9WOVWIBy+tDamgSVDrBxmm/Ev2EUt72ZGiYVRlEONClakKHX9daAy8Mwnv\nBgG1pl87kO2AJR5ZP2sfOLcmfTxY0v8OdhqmoN8JTd+/TWOV7AiFK/Hgzg3C\n+UpMtNayRyMdsESkRz365iULF/nwIrwWD1dWTBt8carhMEm5hdM8FwqeR1Sn\nkshkagXu9T43aDqnAXXoZ45zEjmMaMesvdSSLJazBk8LadvAYkSB9DpLG7ov\nAsybt767UAWBq5L/c09oQVW/pxK6d86dm72IZunrICKMCpcAX5B7TtVBVo8q\nXiMQ\r\n=Xl2O\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"c65c5e2d42eed9e235456f54cebd6f34a12b992c","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.13","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.13","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.13_1616179630777_0.6513015682703776","host":"s3://npm-registry-packages"}},"11.0.0-alpha.14":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.14","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.14","maintainers":[{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"iwelch","email":"welchcisaac@gmail.com"}],"dist":{"shasum":"5abbc4d821d32d77b127d767cfae5616dff68954","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.14.tgz","fileCount":162,"integrity":"sha512-ijRtYk8+TJlWEiIOzFkO0BkC60QIS8hRzLztfXeSQZb3j+64KmJOCciOFFpdyonJYo7EhRWMm7ixbuYpb43SmQ==","signatures":[{"sig":"MEQCIBBgFIjsa1izSj/wD49PlbRWhYQQDbED8+hBqIWulR1xAiB+NgVf9pVglwUEgi8w/71rF0Shb5JHkDo6HAait1DXMQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":420342,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWQayCRA9TVsSAnZWagAAcBAQAJe4wToPeXxVu0ljKWmF\n7iC7FpN5QuQmVfZ2dx51PvhJ8x10r1cosjHRNjv4iiPlwLQ5uVNOpJZS/FZ8\n+sqLSYrENkiuCDTwv2+whzsCKbpgVPcV2dQAp7/TFWGxrwPXIKWrkY5USK+U\nAZpzGN6Zw45EgOgufUuOvXNdrDL7x0x6B3kvmJuZheQ75Fd6f8idGwRQF+hM\n75heuhAbTzYG8YRwojYlBf9r2ZPulgErSN1WlqEIrDvysPTrFPWb/jlEB2sG\nkvYgh8T6doLPwR1RtE8BnyCB6AddzwRxsRkYr9EdzO2xjFOYZtBbcQzuqK/D\nZzwMVQmw8WNrAYxCkqdCaLOg3vY/basWlNxkJizl0qhtpfmmv+amQ2c/yHrq\nPRA31Q4vOmjVOs31+TpwTAlm8IKqAbZGlq+1ilR9VtlvA8bdxYhOXEPmFxDL\nNGHH8FXR8AL/FuT3ovjk4ttns05bdl+JBlw8bohCg25Z9jU9zSGhNXcMW175\nneqhB0eO3/eAJZ5ecvTxua2ymyTCQLhpxv42tUMe5SKG+iE6jBuabHVyrei9\nzCre8hePkPD+CIrOTLAahhziBC4NrfZ0tpXGrTndWJqz1XMjykLejCEfTukv\nXJrKMIEI4xDfro/B7XCgNicf7RHKCCN2DzfHvbcjwAmrA0wM7wnc00plw6Kw\nisgh\r\n=iWhe\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"0a036cafb0e1dd676bd04c3050855de950a5c0d5","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.14","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.14","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.14_1616447153923_0.14561694689708982","host":"s3://npm-registry-packages"}},"11.0.0-alpha.15":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.15","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.15","maintainers":[{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"iwelch","email":"welchcisaac@gmail.com"}],"dist":{"shasum":"3bfcfda8ee446d5eff811c18122a4539ef27d27a","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.15.tgz","fileCount":162,"integrity":"sha512-xw1Y0KphvblpMe9FSBau1RgtFtwa+noLyuTmFNX4RLAX6kfVj3pMHdEn6ThGimMAGlwbKG5BADSa8cpLvf3cQw==","signatures":[{"sig":"MEQCIFTbSBrgN2uoQJzrcvpUl5XAMa/hFZBvhXQ3tCQvZwglAiAm3LdIg8TUJOjzG887Z6X6gLPYh1nUgrScDjGmhDMcJg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":420532,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXKDrCRA9TVsSAnZWagAAkGgP/Rd8tC9YGAPGjfeVaw0S\naKzbCnChHmZc7I4r9dzsbZ8vvRWATcag6HbHIG/A6Y3Nn05nwxD0xmioBd/E\nlGIE7MQ6SU7gba+Iv5eOC70QfoSGbMz3t33yhMwtL9/R4NBNDOu32IW/uKAm\nTwQ/QcbP8BEh4TjlR/S23GoVdbgVG4EdBkJ5c76mwEviAzlw1FpSDLJeiilI\nndO5mWj4JavBNw1KHJC71PoAVtRS+xXqnBhZyoV4eAscZfQfPPAP5VaWMz7p\nvbnEiKjGqCyiuUAnzPAoq+6iTqhBWdqD+ZHeRSwz32B9+M+7Ceuy+ucbEDk6\nBuvrbj89Z5wWWG+/lz2neuA/wYg3gDDiuaYv7wo0Cws/1wvkXiKd0ry1As0F\n2yTyPo30TluoKwZbbMOcf7k1rArTQHaGMQTYNRx439O1niKUz1xtY0CIliaE\nGTLDulMEJrxiVom0y9xSxMuVKynlFodb11e7Xqo7L6EcuUH09CUsod6GJ0dR\nL02qboI8KZZqXoyicp9CjluVkbtUr+oTBMIxdTlr/AT57oVH5dOr6ja8nIaC\nPlVn76B2FG7tnRtTpyOVG04MftyFGMLDdjhhAw1VVrczVQSu10eY2IDEu3S9\nQXmgrEHhd/6TECnc6htohawDUKuReGffh4WjiXaUUg+/7zGxw7gBgIkpnNUq\n0lQS\r\n=dTVC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"51d10cfa9dabc46857c9479f5bc81491932e0f61","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.15","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.15","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.15_1616683243460_0.37608629317715736","host":"s3://npm-registry-packages"}},"11.0.0-alpha.16":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.16","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.16","maintainers":[{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"bb-najito","email":"nobu.ajito@brandingbrand.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"iwelch","email":"welchcisaac@gmail.com"}],"dist":{"shasum":"910ef0c5c74d21395ce82bdb94c3898f859d68f1","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.16.tgz","fileCount":162,"integrity":"sha512-eppt1IiWpkvghhHBaZM56DuWpQtadR4xLA3upOYigYO4ddtt93AFM0RAxOhHCDboIuW+54nBGInJdJ/o5gNMHg==","signatures":[{"sig":"MEYCIQCtcZCfgXOzRVhvyfHKsULYXcDfVMiRtbWUkTkmIFcVNAIhANVv4+nbhMpywYhpL7Xy9nX1ZfotRTxMdbrsITm2IcKV","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":419333,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJga3LdCRA9TVsSAnZWagAAjvQP/1w6ds3kdOCUiQU60I/l\nO5SMSp8vT+Cd2p8IOUZccw81NUQpaM3q/1oTZEWstntrAb8ISyYg4lHpLX9u\nFLZROhPvoNb/GvyL3ERXMV2Rd5Afo5QPtAflOpzz6372sxy3bMVkNDNsjoql\nM+TkijIckliZLql2Q0FcWuJ4NaKBt4s+Ecq3yaoRcXvli2lqJ5TAZ5Bmf1Hq\nzExg0mmAbP6DDj2wiSJGCo8N3dHE9T5eaI6hAv8GXw9Sn5VI44nT1m8tC0Qv\n+LubrX69WdP9dehpUNljLa8uL1E2SWUN3ZCR/C7xQ3Fl8qL3+m+XyPUs7QOA\nG00Q61VuZhCxnb3/2EYLxaPK2h4s6ICPvh/691OlIs6gcVkQhQ8EbzpED2D7\n26Ik/i8KM+GQ3mxanN3fMpF1GrGZKyg4+OS4UwTqgNzIRsFvnIaWlw5V37On\nEXt7YLr1grYtZTlZpWvD/weHB59eVGLFmokPXSt8OgNRG6bssE/B+PGMmaYN\nIt2ZXmYovfxP5Q4SdE9il7h9TYvjHKAF9EfV4Iv0i2pj6SVem+UPtDSqOzpw\npg2TQCnltUsvxOqUS9nhBtYMN5KP0WQdfS+X2OspQz8fK310vxihoZPKvp/m\nIPsi2NKvF9v2NQqfi+BU+7uDkwUHmsRiU8EctD8Fqi25dAn2VKJoh+reKqIH\nfBZq\r\n=UP08\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"ceb0c35564abe15a9fb9bef10fc70f7f22bf9a10","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.16","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.16","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.16_1617654492988_0.29976064494206045","host":"s3://npm-registry-packages"}},"11.0.0-alpha.17":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.17","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.17","maintainers":[{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"8328b1888be0ff52c4c38493a68bf786e4448a4a","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.17.tgz","fileCount":162,"integrity":"sha512-4qFwN2X+SEI/RSy2NSIx0nkEzi7ElZqQa/hZx7B/Y4WvgWPiT5CHZ2OojPFSM36HmXxjZdXDxaehotUP3w2v5w==","signatures":[{"sig":"MEQCIFAIXAMtFHc+BHYP4/WX/+EyVLqidGvAT5vsynDstr28AiBBcasRYVhXLtYiIQGrdqe4Y2tzDFqk+BhbWE7YALznKA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":419523,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdIHMCRA9TVsSAnZWagAADc4P/0suA62OHH3HU1WgPhc1\n08R3JFH+qGlusJUjYU2WX1bPgrnG47VvqJAJUXGFiKRw+ibffkbONChzN/su\niUBnba5xStUo2Y3A68EfveRqnqr5xUjaQgFsZMQR2mjY/bB7sYoMKbsJ2uAx\njeLW+I8uxLCcS2P4kSjbUO/3CuigpG2cZl+zI6eSH6UfSQEEfOtbB9DzzMgT\nKBofCPIrlGJ459zNoXLcWNNwC6yH6tJiW1FkRaeAqwvKghrrfXx5/5GrjOTd\ncFWDeiWsHtiCRNtgtMuQtCkU0K+l0YTtPKrerEoNu2kWu8IqX/jdmlN6eUAF\nNANynjvs9rhyEttkLMIZBehK9gBo5YaKSpwKNzZ26a0ShPbK9nPEzrjQfsyn\nbEkysmsvstpULOmzRSFqouhrWvuih+a/oU/7IjJ30ixBPKeFhTLOANCJrFq6\n4voQ9ILoqXaFLbZN6ZSESIUy99HqyI5bY2of2dAmUnqahRhzets1oX9NLAzx\niqXS6xTuQLE+XluYGSviX39FF2uE5koZjN0fzm7llhCAdT7JvDkhMii8x63E\nVe64UhYNRCN7w/5SM15p1ub28EyQFawwqsqNjXc/BbzCLW8i4tMZDaBFhy4P\nnB9VxjgxnRibXmIZelDPEBKOQfO2yu6MwzgRmAECwpvwSIPaYvocXhxg1Qeq\nXD7C\r\n=HJRP\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"ab838b2492aaad2919393508d26cb1df7678f8b5","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.21.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.21.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.17","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.17","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.1.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.17_1618248139555_0.8240616469992093","host":"s3://npm-registry-packages"}},"10.12.0":{"name":"@brandingbrand/fsengage","version":"10.12.0","license":"MIT","_id":"@brandingbrand/fsengage@10.12.0","maintainers":[{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"e889a7bb2c869a4d85fdc263f60c2488f4a7055d","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.12.0.tgz","fileCount":162,"integrity":"sha512-bSq8g76tq8HMJz7+o6YtEdoq5GA5glEveC6oIEHKQC9HgHXsRg8tcpuIW6YPNrXBKGd8nArncfD4RSoSbg5/Tg==","signatures":[{"sig":"MEQCIAvFKHwWEHkTmg4TeNPFEsOdktMsQFdXA2Ty+f83LykTAiA5SFbfUaQZlNI2elt9b3cWUSdsLDlKY78pfREAaMj2DQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":422484,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdxYbCRA9TVsSAnZWagAAp4AP/jv7XXPKIwsoWZXs5+vB\nH4HsWbd9PbinASIwFPhoznXRhslE+PPLpbZ1Hl0xjLf9SjKdINvjaLYqR9Hv\nuwnouc76HPifNkNDwQYtMOKcwkfRymErxXz72RNDS6vaZEuW8+4RydDk0mu/\n99aFGXFxWnYGQzELKFC3Fmr8lm33h48MpQWX4Ye1COfpvVy1t4BSWzb47782\ncAVpZw1JoA3QCaNbbK31tkjPB6P3mHXunqGc6tXZSQMT7NRQC0SU+M18tQhk\nOl9sdkLCoGj0OnthWyLdjNGTlXlrearj9B89lyXSBvuWMzleU95hgfJkKS/w\nMlH78BZtQ9ti+GQ2xhCDIaePMuhbPnphAMQ2/ElN7ieyzvETVIKxN5p2ljwQ\nVyp6szjKFWFIkwIuM9aLMiucaKGjLpBInYPnXsoX0NC9MOTIyX7cSd0q85FC\ndvitJ+5+6TFhuKPWjGdsSCuaEZHdieQi3SkfRadk+00Xxx1PeFhc2uCk1yiK\noiRqQucEx3IyuN1R/k8rDgYeXJK9C4pWrFJeW1/2Ue/Txg2mPdsZ+R7NQBGy\nP47fHfZPBq2p/FTfjkitqSk++vyYViS2REWol/+R9Y1izjg2tYLnwgfv4upi\nfREq3ERFFk0PsaoetmMGu3xFhGuIQOLiLW3jWISpHnk/Zwjj+Ju8j9rPGPwr\nLZ7y\r\n=Uw4I\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"3f15414fc03fabccf504c6038dd80e1fa406278d","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.21.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.21.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.12.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^10.12.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.12.0_1618417179118_0.7733497029065912","host":"s3://npm-registry-packages"}},"11.0.0-alpha.18":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.18","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.18","maintainers":[{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"cec951376f9f6e8c23d9149d3253afb06c747fd8","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.18.tgz","fileCount":162,"integrity":"sha512-Mi0SE3qVNhbExj4M0f5LHI0u3mzlxIFQGiylEE7P8foYuh+RU2DvXIHB+9UeSMK5LKyMGHMV1YOcH4iXubTPHw==","signatures":[{"sig":"MEUCIBTIrjZ3MOw0iIqkeykOqtm3MVqU2xAfHqYi1ZDtPBt+AiEA4V1aZllOKFNYEbrY/jueW0C1GDxrw/t4UXN+tXogN9Y=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":423533,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgeartCRA9TVsSAnZWagAAHtkP+wXQcAVzNGdmlXFNm+K9\ndjT2FpZ5Uy5elKzn8rr+hi0p0Ux+VV66Oab5HqYDHWEj/G7+nhoISCbQCb1a\nD/IIEdcuEBltHofazBSWSxY4Oc9ndpf+YAfChukk8SHxOg2VyQNHQlO1NcYj\n4aAdoRMcbcYQPRBBVsxWaafWx+52ho9HVuWtAhZciImoiQY9P9i9Si2D+zsn\nFgzuGoD0G2aIeTTN+xKBC5Rxd85Zm8WZtmcjXmEslbv3oyQFtDtJ1Xepq/RV\nPebVtob6Ko75yiIuz8PxtKaOkxRm7Z7kLMajTy7g0vDw59lx22Lnn/fWeTfm\n34wKMl2UkhOVixjT8GjDxWohuxBubH6501OqhShBuL/2W/1PI1mBOb/1NUdN\nS9MGa+fMKUGpz3gfeYKW6V4vK4Sc13tjJ14USZSTddb+MrIdBYyWsdNXd+oy\nY6cfdfeJXxqqsPL8TO+pwE9vZTvjfvrL6BfsLJxNXs+DnQE0k+0jeI/cPPaR\n4gGvu3Jm9KA4lk6wjUytONxKlvCqNdlOcJB9H3TOXjDxJ/3+3F/7eoBDm6zS\nDZsaJZxwOSsjNf78kcxopahd8LrHnSJ35rZcKcqXr5VFzXxfKl1vpDKUt5Rc\nstArsKT40uf/xNX7cMwnJeMg4eTQ+zyGtQRbxd7rNiWEddBNTmIzuW4FrMZt\nq6S5\r\n=hzvX\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"df66e0f2f764670f0fb85723f36ba4124a1a1188","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.21.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.21.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.18","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.18","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.18_1618586348846_0.8960656094792043","host":"s3://npm-registry-packages"}},"11.0.0-alpha.19":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.19","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.19","maintainers":[{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"cc155dc65029fb3b0c6c3e425e8367e745a38fe6","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.19.tgz","fileCount":162,"integrity":"sha512-IswfsWXF67WxRng6fxXpVoCTUAmZEwyQT0x2fZ5wD245vEqHezNOwGUWzJdPxBHFJfOgVZyCm32CIX6l+CeICQ==","signatures":[{"sig":"MEYCIQChmCJGGApXt+BHcK1X8GemPWw5U28zK9y000+jCKWAXgIhAMSrkHObkGCbhklZYZYK5xlxgp5WWHNMlfBGyPhSBR9M","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":423723,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgecgWCRA9TVsSAnZWagAAqgcP/ilyyKiUA2eym8ijTgaB\nwT20Rx2JrBeicbB/3u+s6Z3mzDTJlx5JB/czhQa6h7jXKae3POw9oRq3+Dol\nXwh6XSxmp7qM/l4fXk5hlNKofxCuYUuuoi9akLrBHvgPDDShe53VEPz+g6s4\nd7L0Myqcf/C2tzLXNshW6CvW6ux+wMmLwRtOlOBdmqMJCAsJxIKbJE3mdEKw\nybIVEA4H3spK2I4RKojFAJe2l0uV29Z5Wr3TaaZphm/DGSszJSJbVQtHT6gx\nF4J9FVlrdE6AKMEIPmzFXozry0FdNjNgvf+M/njcFXqL1GJTmFWv1rFRasTH\nJIip2dbHbF6f9VNluu4xa+YnfX/4ESkMGb4llrroE84hTD7KWnnh4NPoYSrG\nJY/esg/DlB2+jAmbgjFwUW3r6boMEkd8UUxEPQ5ewssUS3h4gXzgBH7B0yGd\nsmGRLpnd9w6LSgQ17GJHPBK1RHoSWFHH5WS1ZeJOCFbKOe1QXB1J+PMJaVp7\npotua5WuRvef7+42rQI8iEBCwsKWBhVdcAHwt7G6PLvzslpgrbKt6z6bXv18\nwpzhLJYnMdoXrqfO8isV48lZWc2Xp2pn6k/nOWZ5cJncqgrIN6qaSgtSwQ1X\no8OC+DjyUHzMobff119HIC7PqQQJ66RTl8303v/Yy9ekju/9JrNfg0kopGSN\nDvAs\r\n=hz7Z\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"405e1a840c6ec7912e492f01d4f3cb85df79f4e1","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.21.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.21.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.19","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.19","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.19_1618593814030_0.6610742687880784","host":"s3://npm-registry-packages"}},"11.0.0-alpha.20":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.20","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.20","maintainers":[{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"hearsh","email":"Hearsh.Mahidharia@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"ab5f4fc42146bc43e69fb92f7ef38d41d259df0e","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.20.tgz","fileCount":162,"integrity":"sha512-c5oMMYf8TX2km2E5bQOCYFa/4Vhly7KJuT946jKWgNgf6rAXCLru9juSdpDMBywHQcxkLpxySL97iC5datffmw==","signatures":[{"sig":"MEUCIQD+TDiGXFT704OfPvPD4apR0DltPuVCkRxTF7iIrgN0jgIgFRrMcYYlil/uUt5U0nEAtnAJaUEzOhtnIfMn3NIthtw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":423913,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJggaa9CRA9TVsSAnZWagAAoqgP/3scrMdlU2Foy+z2uXNv\n1qis7lmOXjBmDs1a6+u9nCrRE7+NNDXOU6KKUxrpn9ufWf/zDCShSsbl5XVT\n7QFbq5jHPHLkmHJE7c3WjGB6A6wDikrRscAfaw8O1fa8zyagrelyPhPa8SGo\n7PbqGzRIHglGSkDsTRFXGYHlSOdsY738pc5r05TKT1X0g+IfEFeUbsIBYcor\nACefaM/CDnF+DWqEfMgK5/yn9S5v1kbQRvSLcxbCs9M2TU3QTmSEq1b32C06\nuLkKGQKM0pYsBRuRtcLlHvWsVJ+ZRPmxAKR8pUKVUuUyuOFHM4ptAvnvojN8\nDhClKHRDNwir3pRYkuw7AiQYN2T0+bgZEAXpPw7xGAQoqxTHmg8qejYRbnKf\n7Mb6R1sIKRMYrmS0ecxj7nEwNJQYoDGu/+hobKB9yYh5lDtyCj2u8ICeHUdW\nXBpnj+tr4NPq7gzcYEaEWHTbo0B/9JtzCaWyO4SUJnWsRbG9E1f1TsHb8Qos\nyQtJqpmIovJHtPBfSSYCrsno909syTHTaIp28EUrtXravuW+VOFSzmix7yuO\n/R5zsNDcDKzfCHgekcOmb6cUAJGGAZSJu5pxIZMs6amCMz8cL2mUGtOPO+m4\nuFR9DD6Yt8TdoPY5WTvBAh8DIffibbKOCbTRaoEeystW32SpclE8Gq1PuTTN\ngKSg\r\n=94Mn\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"7fd86697a61a9fb98bea57b85e5695e81163a5d5","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.20","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.20","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.20_1619109564731_0.05857126867486406","host":"s3://npm-registry-packages"}},"11.0.0-alpha.21":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.21","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.21","maintainers":[{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"avard","email":"alexandrkorsia@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"1e6a72300f6ef5f6129958f4a3d4861549a7e36e","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.21.tgz","fileCount":162,"integrity":"sha512-uslpwtr/JEqWay9QRRHseZpivP8MdkFaJ1Iof7UqfFLQvpiYk++L3eB1tKu0kA8RNRFK/BQNZM/D98tKZ4VVNQ==","signatures":[{"sig":"MEUCIANfCgeshrJn1bZ3myqaas5vVjpRWqQqQHGXpqNlXelsAiEAkex57MbQWetgIpQi15VE/+u07oFsm4dxi7KWGSQxA4g=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":424103,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgiCTnCRA9TVsSAnZWagAAYRYQAJS5N3KlV8u6BKdpr8gf\nASJBVd2EaD6byWEICq/pgakVQqLtmUrcoIacbC+VLZ9f0sSueFnx6q5cGIsU\nOqD49tMcGpvZKbUoyrLJgF8JA6nLQXd9csReNzuGjNGPEi10IqixxhyXeFzn\nUAiNB3ge4B3tKtktALsMylY5PxYDUOp+8ElwMuwBNdqbLzpT9nAEJ96M6hZ9\naZDxinH5SOGXJpnGJTgjJ/QZQmFgAFzyNGdSt7XimJvSPU55D57sdX7I6U6u\nqS9ehVhDKwxav0kmY45Q7QO7wOpKWVirulppH8mMTBzJHGBxrsPsXQ2D99dd\niNA/xUeqyT1ESPDsj/sCWIzSZsC5LkGay4kpIlmJQOSAFMXum4WyH/aU7bgg\nRp4O1pfmG5HClownN8TC4lheSEMPaWQBzB8jb+HJ8f6SSRyA+P1jKXz0zKma\nmWNE22RgzSkSBaatrsPsTIM7wkTIIaFpc3njldXAgTJkSCHsjC/Jm3n8D5Yb\ntLvHShJh4CtaL75pq92GoIfVVANzmqYRTNEJUrJUZtHM+A6vtXXdHgcMqgwL\nfED1RQDH6VuyISqiQ9gNY0sVc8LKrMwIxrhBe60XK5o8VWv/ywMsEjj/5heP\nv+D29sJVa3qE5z0v8T6XrayXcw/AbxXnD3UHoyj/yz3KS/1p963ocTBjbByP\nGNl0\r\n=W3Gc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"777815066b3cd976e3a352d349ed5b7541dd8955","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.21.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.21.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.21","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.21","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.21_1619535079321_0.055019202073496754","host":"s3://npm-registry-packages"}},"11.0.0-alpha.22":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.22","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.22","maintainers":[{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"7d52ef42a2a5a8dc96681a597bc18ced553abd32","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.22.tgz","fileCount":162,"integrity":"sha512-JN8cpb3NZc7WDsZUSJUSF3/Dl+ikcNoYx0cZ6SEJcHZc965Kno3ANa3v//0nlBRihXiYXiowQDfAO0oHL8T9FA==","signatures":[{"sig":"MEYCIQD12BXx4FQ4gyMieLZsFvNu35jDQuWAuOyNPiBa5iU5RgIhAJ84dGMjtQJFFsMeuIRQ/MWjDhh7yDsI09EGlczXx/Uv","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":424293,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgiwfdCRA9TVsSAnZWagAA+zEP/33aHNmm6O4RXUHujcZy\nJ14GeQtFAnsqy4JGg50RuqZesjxBTWL1BfttwH6lY+dLbiIvjAsc8qaqhzvQ\nMyt2RSeznKpinvYoE90mdDTqZATN3NN78QBKeaGb/Sk6TFEf7p34MZK5XFZ0\njszMB2lBtJQvZfGWSyKM931a9QdaY3uLhUOfw/QjhcxgdTOFBFnJ8AYH0cR8\neP3EWC3fTjYG5RlLX3qwvUKDDa7u7Hy858qfHBVpfg1Il1UMCUr0mN0HxAcK\nOXx3R+Cg40UXCFFn8EywkrryzZt3jAJM0LVG8Qh7iMSoefbA9jf+TAQyrPii\nmpU2m5Kf708J+Sp82N1njmSzR2JDpRZE7JGhlGRFHh9Mj6FDqgARbh/arGFi\nd8/Iq2lxLCwMASNB0JxSllpiJcNygdxbpBQloiP9BAIIgzTuZa5UWFhMq1Gb\noic64w+vuPLiipq64bW2DhgyJogDw6Xe/TBOamPkBIN8YVg8aSE+s/Jl7nOU\nuhX/ZRJYLpw2tYVrU4BstLZ5uw8oUlbxeRcdAON6G8WU8+p9O+DuhOIxGlPC\n0W+SMRBkaoUIci91Ay3ncfNrwHbtbxnPSE3EJ7+CTnZAqacRztX5Ww/SA+IV\n4WTd2zXIgVJWBwLXPgaVGJBQ9m2bKjeKZo7SN4UbHF7S1cf6tYNaup7V6oO0\nKjWd\r\n=jMRC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"216e291c09c847902700e6aefac0cd28eea7395e","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.22","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.22","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.22_1619724253266_0.3374872034055967","host":"s3://npm-registry-packages"}},"11.0.0-alpha.23":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.23","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.23","maintainers":[{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"2024f66be3d53d9a031a9b7cfdddbe2fd6285a96","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.23.tgz","fileCount":162,"integrity":"sha512-jSNF6q1m5iYLdQWC5EroGruuTSrrbyvBcBRvzZKBJpvF76igm1jPfc9X0hENIN0TP3TVy1KVAnQuLENkPDNUtA==","signatures":[{"sig":"MEQCICSK2CXbygY2GqZ81mjxaJOIzY2rM36cgDsNzpbVkKT1AiAlKk/SDqSeLXyC2UV1N89IXqAA4sxfNmzAPZo1HCRblg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":424483,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgkspICRA9TVsSAnZWagAAYQoQAItLC4W/IH0DCoGr1hpr\nh2s043iflKAPRNe2dz1beSpX0txQga6esR5S6YE8l0Y6Iq6dDEDnmLNwWfVG\nV1W3YYJlwjp41TymLxOUoommAXRIakZWlVlP3dQKu4FzPlmzdnWODgP/nhbD\nIcK5PFMT0xy4FNcjdBFra3aK08wb9/aXY871n6iXmwFv6dc0MEQuoKaUXYUA\nL7sNI3I7JvqU+shQkJnHF+iBT83sNHojSuGqKyYD2maFECjtHzyJS41Y2ppA\ntV9RUulfXJvlH5I7XGGbRTfjhBSeclzBY9FgXdJUQhGPd45ZbgxXaK7f/aGy\nl6gPvlvWP5VmETFyqIF6ZdOzFeYSbVRs610WzP6LM58OdyubeqPctpHrl5E8\nMRTAVcftqYY5ByPincPowNscKJMpxIm1jIzXgbzdCYxDigUVF/Y8Lojazxc0\nUfqZ36CdpkFeKmZEp3Kt2mw3zHdKMGwZVAhx04eoy4E50/3zzsfN14EUvs7L\nWKeqwKVLCmI0QL07PMX7DRz04wAnVLFXvEJ3MvePCkcJfZ8PQd/WC+zbf1D0\nFEU5/k7a3TbgZeO/ItNPRi/3meZPqG4Fn1DBPXmINKjxxlylfW+xLT2+D/3r\nbUAPZR2xqi/C8BnEpnQScDIJG4jUypree2sEeSsKkHLPEya1R42Kh61qHsBX\n+FPH\r\n=j+wL\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"1c7bcf7afd2989cfdbace28b9538335b67c872a9","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.23","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.23","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.23_1620232775588_0.4531582899753728","host":"s3://npm-registry-packages"}},"11.0.0-alpha.24":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.24","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.24","maintainers":[{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"sapter","email":"sam@sapter.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"6115fbfabe41ac35ab3428c0428a05592c13d93e","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.24.tgz","fileCount":162,"integrity":"sha512-y84YFjg1ZvmoIQwEMewdJ4VGtwu/urFVXFIXuVpF3lKGGA+msIse/9E0nB7mRNbMhUJ8UAxZAIwbz/tsXGmvMw==","signatures":[{"sig":"MEQCIHd86AfEnOroXW7czr3Umei7SIYc4Oz4NK5TdNmzhQKdAiBqILnidhAxGjIEOaG9ui32veFEJWS8Mq728YjkLU/m1w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":424673,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJglFrmCRA9TVsSAnZWagAAsb8P/RuTiLCwtDH7d8/a6n4I\n/yDtWfGP4tMXRmeEAKnOQXzGr0vIwJc6eby+VquE++CJv45Loy+sGY3tlHff\nR3KuGlzJlVmrOC3qg0M8MnGeRSckMgiL/46N36nTSQQE+b0dR8pXT62ty0IJ\n2EQdy4w6VM+QIRMjNTbiRCcY4H3/C2KrgSKKhGQiiSQ7OUNgPPY3YjUMJZQk\ncHRMHD4dVTyj3zIh+FQ9rQrkvSpQc0sMX3F69X36E3D+mpTK5KQveIAyGERK\naG17QJTlpSTgoD/Xax9ISaXmfbEKI5z8kap9mQ4RzDxPoEcBpu6/c9xsLagu\nFSohw0ENiLA7sWc1d48Yq5LoWhAeHC519H2JvTer8qqJAiqVmjHQLpBWRSQ5\nQgtTq87CEIPZrRn0RKYhZHbkpZPekTQhZ2RyCHO9OV81e3W0x/v6LuXJ4TWt\nE+ZxdhcIpdYkdfeq/msH+FsSwCt+aNzdZ4yQuFhLBGFl+4/sNQxP0+VKLKyf\n4U7co1Pl8Lhux/1a0uMQy2YgmuEjT/uOGBOww+qjlWcMTNa/u0hRpCRcOjTM\nRTpOvfwikXhk0KgdXVqZ2mfpQROuzw1gxOPNH3EHN6MzAhGSbOm4DV/g/wV7\nOeutOcqQPoqqirQ+fqVDSD6FqMxWIer4k8VR0i/cm1Pku4GFRXue84Qkk/ha\nnSWW\r\n=jzQN\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"394091c08aa10e72f3ebdd239bfeec5e232120fe","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.21.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.21.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.24","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.24","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.24_1620335334385_0.050801060510361706","host":"s3://npm-registry-packages"}},"11.0.0-alpha.25":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.25","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.25","maintainers":[{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"cympak","email":"alexp.webwork@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"d8cc89c276cafcce13428d3a532be21eedd3b00e","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.25.tgz","fileCount":162,"integrity":"sha512-gvNOgnwgwucAp5Z3WBiQSOSoudW2RDCRttBCmjRVE1xLv3rUwBj4O4RuPrxKssMOmi7z2+uY6a9IaZciZ1GwtA==","signatures":[{"sig":"MEUCIQDYyIqOM6rDF6rOr/gDZ2jwmnP8aXlCVLjL271UG/zbNwIgEgjRjHUiQHjSpaQ/S5vPrD9R7HK4epnadM/mDUkqLpk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":424863,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgm/V+CRA9TVsSAnZWagAAuoUQAJEOOPS/XLVZF5IJJ9D7\npefDPiJTLSskrqBMEzMZZptCzGoq3SR1lHGFFH11yW9WrhbrUNkmme7hA5nJ\nCKh3Srjj107ejAwxCjXZlyeNIkO4g4d5LVSvAv5e35uMyf+Y6aEv8kl+OkUR\nBg19iLD9sVNcXBy//fh6pxZVUuxkIURYQeHCtJq8PVXbEhpMWB9PdMXQg9h5\n6SEN3/lQRjLeEzLVU+tA/PRmFewQaCoTILJjuJ7Rm/1ZhPjFr/Q8WCSjgd6n\n2U+mHkbdu6zVGTdw8KAjnKQ0onDhYVDN2/mmS3dK037ssvFSUr/ZbhumyJHU\naA9P07MZnWY2rj/JiIdMX7iRYMRdwJuEIGwekB5SieVOum8xSHnU7eGne1Ed\nP2Ot79yC/IT6qNevyKb6qNhVtaUuKeZPcsVxd4nN0wCZPx0mzy7GnZvB+Rtv\nOC/mG94B1zba78aN90KrBPuGdVH8Jg6xlEFUyOJy3LKDmYNeTyGY+2Fn+FfO\nvPKrJyXFc/TbSrlD8ORXpiqM/iI17IxmWRr6QUW5ZtIlAk4sIBnYeQ5grEzK\nwpjQ1yVg32EDZo9sExveO6OLmxpOuPupAXWbmduEOAfvNcQrIoImbDGxmjP/\nXnVMu/DQYiK5Xj1w3XjZT1XvZ2MGvSxN6focRLKNvl+DEKOp4auvFDHasY+m\ngUne\r\n=HKQR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"4c255724684f6871cb3e2c0b1ee788bc78f25517","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.25","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.25","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.25_1620833661934_0.21524987021760777","host":"s3://npm-registry-packages"}},"11.0.0-alpha.26":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.26","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.26","maintainers":[{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"cympak","email":"alexp.webwork@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"54205e197b2e1574363f302e8b48a2a933212849","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.26.tgz","fileCount":162,"integrity":"sha512-f5Tx//Fu9IVIDWeQj1R8gZgHmraLkW39wsQ8SUddZh6DHlYRDXByO4Pfvau/nldrBAOCLNJhko976aIwZO7cKA==","signatures":[{"sig":"MEQCIG8Z6qPuzzLOSOnm5s7csOLpZe45tQxb+EluM1oeiveKAiAvt0KSeBkMgkaeyyhGU6ZLJxUSN4RyJ5Ey0CgUVVpj3w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":425053,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgnY10CRA9TVsSAnZWagAAVg0P/innpQ8gPI21Tm9qrwYo\nKTsc2x3BGWx+4MtBtyJnOegtR1TA8kGh0HIXP/0kOUONcyWjZ0dJAg4X0sy3\njpTC80BXZnyTbMCMYCOof9da+27O4cVt7mY70jxQHWK+kR6tuJi6bFO7ttfa\n91xtIkfDTfGTRvW81p+AU5GB3eMSxMJNTE/9s4J8UGN+TUDZpEdSBjmVkb8v\nBU3rUytu64j5GVqctjWP4fgjbRzfL0eUMKhk6OIcqxZ5EcAOosTvyxCWJCn7\nfdwDbt86Q8UreikG21I8bdVRobvnK+20/WiQfwYIG+p0TAwuB5nTz9cDdS72\nQnimxS7rb+BDFiyfp2k5Aq4F4AGLYfcxfeoDQkvzM2cR1aJFqNkUuESwk8vA\n6PFaCl7GDBIyJjqvjY+blSihM4OaFs4md6bm7WZSoSDo25JBLUMaf22Yc3ti\ntbu/K2w/4gOLEixzoGpRKtv55X1C/vpBu0JiAxc9L/RolWZu+R7Y96pWbYw8\npXCmM7Qij0zUES8Fp3ySca8QNF1XRS5uFKk77KFqX/gvMFAab7Aka1OEbw5d\n8Yko7HYve6laaBFbsrpZozVmmRvtP4RahJsNVOrU4v26FChG7TvxxmJlpVo5\nTdmg+N1NTK31bIDpsnw6D+0MuZgyvS+17SIoc2P4zK4430YiN6uEO2vLYsiv\nlqtV\r\n=Y3DW\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"c6d573b9a13b9da8eef3ce1e4907dbbc89888598","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.21.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.21.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.26","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.26","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.26_1620938099879_0.3332889581210472","host":"s3://npm-registry-packages"}},"11.0.0-alpha.27":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.27","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.27","maintainers":[{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"cympak","email":"alexp.webwork@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"branding_alex","email":"alex.risch@brandingbrand.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"880964e6fd995cffb470609c21fc0c223dc74690","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.27.tgz","fileCount":162,"integrity":"sha512-ACzu9uFhQwJ9p6RnTEAzksxItce0lwcdcB3LpdpbEcKDMAjc3qoiRLFbsrryUwAuK04VY01dw+PiIB2pz+YefQ==","signatures":[{"sig":"MEUCIDBibc5m4Zk1vpCSm5q/uDrj6C6uH5FHprUGO2BM0i2bAiEA/EtBL5iGUNmbL0VNXOAlpYjUA636XKlojrhvMIi9GVk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":425243,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgo/6vCRA9TVsSAnZWagAAmjQP/REYJSex82H39IzlFOMJ\ntMhrjhqK/f6tOHomFwWkQc9BE/Srz10ld/4F5wiwEuYYuK+1KWY3/LYGJK8Z\n8JJ4gKDuUk34fY4O547C6T9vXHygBUUxLtOWf87LsSFr/dTvfmsIbOqekusq\n/r+Asj+Ft4vgN8RDsk+syGgzD4e++4757aJLLABtl/Ni9d/tMdmM3mW5sHhz\n7WAdbD6TXgFa58Fx06R4UiN6mkCFRShFQslfvcgYye8q4S1ds7dcKQO7w3G3\nLuHO0XapNNspgyJ8RND++64p0T/CdT6ZOsyC9FdbGAd+ZZl9hjtPrGfRqe+X\n0JM91rp/p9ZVaOAXBsaHuUNHbcIy0OatwBuw4eU5Kdk+qQBOL3hwvX/nBvvD\nCBjmeU8qDsi9/jAoDcWP1TLdYd/5KUyVWXjHHwOysT52zq+jwOTZnipLDIO+\n/l+F36IIHjPWdulUpqwVuAKp1pt9sJC4YVpuq6Ihjw5sNrADKjvY6bRtpnVN\nKhjprNeHjJzFLn0hMaCxsWD1ToylgQ9NcOnkA0b5r136efZHlXRfhCrFRPno\n+Q8nx26g4QbJM0TWnT1jdrlqIfNUp4RkYaSdYYnr+lBKh1SYRoRFCsvccXkg\nAVi8d+fc3UU0ytMRYDvReMSIYm7EKlCHcDdzUPBcAGcXI81PsCwyCRW7NS/X\nRiZh\r\n=UrtR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"a4559fea3ef66e318454db59ad09553e86ff843c","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.21.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.21.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.27","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.27","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.27_1621360303255_0.011016037848254445","host":"s3://npm-registry-packages"}},"11.0.0-alpha.28":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.28","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.28","maintainers":[{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"cympak","email":"alexp.webwork@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"c2ddb020df1d394ba01fe32addb329a34fd5e42b","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.28.tgz","fileCount":162,"integrity":"sha512-VJTNLn30+Ujr8S7wITxv+JedbBbvHyYj07x/3CrpE7nF5zIGTXnr5nOaHCPICl98pgyS3d+AtPVq0UA48qAl4g==","signatures":[{"sig":"MEUCICu08eLru4jKlt8/c6pCISOffI5BwA70iHc7cVFv6FXWAiEAxuU45x/mcJRcUeWMxTOrcytJ+hqWr625RblruDp1qE4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":425433,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgrl2XCRA9TVsSAnZWagAA2bgP/0A0AyKYaGz/jvrisySz\nW67cyZEhae5y/t5qoNfmUtAAkRpF4Jr3+bT42R+Wvjgj23TNLL9qyYkvhzX+\nCoMrfe59gQu3HK4HvERvgAQWMa9h1K20u9m1RPRIbzrfnqn5qNqSyBvwdiMK\nnlLwy4/OgsKi4UFofwShjKdoT73Xoy1JdKMeOVm0qZyF1JChOzeV3Alaz4Me\nygJkJ+bdRPbejT/O6esuGNGhiHW21zBcaE8XQB/GTWI4D3jWd2ONwo1xu++e\n6D/LsIFBxILpA2UG7MHKfNjXgwQUcprUtXpUhgI7ZlT/oIrN73LMXExgvoqA\nXN3kf/zt0SrtDLcyjQNs/Fj9EDGE3hfnMfqnx5k03RWtH1YZic7yOMnC3tTl\njugBBaieCI9qM5j56YeRygJw8pQvesS83vzPbQSRjhr/24uerCP5ogSD8Sk7\nJ7a6kamx+zDNP9VWF997hPQckrGZyRgU+vQ4rksdhvVJywl7CncCLiAaqeAu\n2fHh/M/M4V4OG/WWmfC7ixmyhl5Lq50IEt3+V+GQEloiTlDN6jVL+LF5JBSV\n6SS2CiVwRL/uF5K4lGUtJWRFNOA62C7hw+H+peAS3Y3/uC2qAinnajDwhrGb\nzItz2GicZs2iO3b8PH1ZTDuhfRz02EYG0714xmmCwILVs5VKYSaux5WCRBLn\npVlR\r\n=hapU\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"d1e7ef24d0d5654e92ff760cbeddba72d118743a","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.28","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.28","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.28_1622039958723_0.5210866469113378","host":"s3://npm-registry-packages"}},"11.0.0-alpha.29":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.29","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.29","maintainers":[{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"cympak","email":"alexp.webwork@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"metprox","email":"olegvakarchuk94@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"87f9314c9ec799a56a02e351914fac68f2c05f9c","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.29.tgz","fileCount":162,"integrity":"sha512-86R7Txas9sDZTxScUwTBgntNwNHDfxwTZOgFf/FLhK7g2oYFwTrTjWVBUaNzlgp68Ac+hBdCPkogAidQyYJEwA==","signatures":[{"sig":"MEQCID6nzRQYXnDChdtskn6AKC6I2Auo+8oPi3VNxtyZZgsbAiBLlaKhzxaTBPhfpTgsFyHX6WIpOhFN421BRuaWEL/obw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":425623,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgrrXBCRA9TVsSAnZWagAAvOcP/2KATaW5qLYu4QsCal7B\nCV+xWpPlHab/ZMAQ8J8FNroeO+e/4zzmHhiNQ2ugfFRMVJNOLRfQIaVa/wXt\nBdKu+y5Tee6ZStRJ61T/Syn2uAN2XXKHmuYxjAcaNwkQSENkDHKOFX3KTUMn\nj7j8YoQRK+bEvYxi9o3A8b3XRCc4Y7nDTkZMYWSskEJBO/tciN/bp186BNnP\nEWBZ8aWoY4e6aJKmGSOuNjs689XlBaaGDvfmX3/2t8nK1MahGyHXYGmTkVEr\nI/BLexj5h3DzmJLJZJhAgItOqES8o5oyyq+/NAXwRQGrH+NZnDDYKqd/45I/\njYOvjsuSOhrl08gee5gzdRHJES9JLFOsVC8W9QsQV51zOstAJKFARnB8FLN6\nOFJWGhsQVslpJHb/Pp3cS7fn8yyv3BkkxwKRXepfbGrxDn7ECrAjUMxRlUCU\ncn96idFesCSACkjX7KVs6q6j1F5bdUWmJ5mBrYJaD7RjMoRRRxvSBdlGTrAE\ny/FMFnxix73zuPaeuGQnATEUc+wkmi3H4yt50/sXMw5Z0zbat7F7qoaP61oG\n5zGcJ3e8ZiG8uYOwkL7T9Kp/FRPsxCUckuB0DDuKqMtuzc4nhySVujL6SZ9a\nJpY/3mRWBVCqzpoHWkD7sHngMdE63Gatbis4vkVvV1ZxV+v+nuam6J+w+4Cw\n5Jy3\r\n=dL7l\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"7712e91f94d1b1c1d7f82c085d29be67392a829b","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.29","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.29","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.29_1622062529526_0.9880357609165675","host":"s3://npm-registry-packages"}},"11.0.0-alpha.30":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.30","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.30","maintainers":[{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"cympak","email":"alexp.webwork@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"17a071c4150b66b38e3ef8ecccb55939de402409","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.30.tgz","fileCount":162,"integrity":"sha512-XSUSuhNDBOhN1OkAYxlbVzh4xeSpTpBT8JTf57TOFo90UKQpKPI2+eBvIZt0qfoFPo/vo+UEbI7vzZaieSnELQ==","signatures":[{"sig":"MEQCIAcqY8lhDUGiyJS4qNVVcUCMFqILsTO+qwMoCbtEHSDDAiAm0zKHMLHksiFHBXVgvOkuRzQZ9C/wK65yki+LlNdYTQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":425813,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguV/nCRA9TVsSAnZWagAAd8YP/jNAxSEUiTgaOZK6t7LA\n6uAt0dU5LnpOmZDGUHNgbrtEAxsPnsbVzabm7h8CJ9i48aECF49qjwIemopY\ncf5+wMLA2newb0x5tcSONxP82d4sxSy7zfQbZWo4UfjOgHqTu1mfbbvSaPDv\nAiwB+nkMlB/t3mxkZtWPgKS5mD00wa2VJNiSx4+aBJ+FIF1XtMbxYFgpTrRD\n/TeQ75lbGneJhjyHd+BybGc/UHK8CgX2ARTeF/7CFb29o9FcZ4OieprKeqXt\naTfxzB3v/Y68xf7UW3+o532lv+W9lrnArepxq5iNQcBoW6y0ycC1ExLAxq0L\npqCrfdWYhnnBru6f6qUt1caTPhajDO2B7VLRhvuLvJro0TK8Hlx6G9Yd6ZLi\nGpF0vj23OYwavFPt0Mej7aWJUVC6DPasd4oVwEz25byck3G0G2IELPGOZHxJ\n3etuFvvsgSPgxH1Ket768oNE2BMbwNz5vETPhHpqp5cAnVWfLIt1i/La5iLr\nLfyU5lxYZnUhs4a/9GrjBSjO31p8Jnq6bFJMnPReUcHPwborxOm+LlCF8b87\nOGucQHzNSG/nXTX73Vh6jhwYsdsLSXTDsyz/xWZrA1p80qq8qeppoC2BbQKO\nal2oP/UsHb6xqJt9ATlPpUjBeFvzrqa8q48vrWwFfzzTQ7YnCTopHlCCPJab\n8r6o\r\n=Shde\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"f24bf899aa82a701e29fcf09c8e2bf468c23f1de","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.30","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.30","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.30_1622761447054_0.8011407385832825","host":"s3://npm-registry-packages"}},"11.0.0-alpha.31":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.31","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.31","maintainers":[{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"cympak","email":"alexp.webwork@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"bd063e9ffc87c24353f2e97aaf42b0f26e0f287d","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.31.tgz","fileCount":162,"integrity":"sha512-hEabnnFnD5Ql50n7h0IM0T+eZCwBwn1zSgdYVmYKl1t2fpGvGAz35bRMbBYHZACDupyOJHvT+WCL3ZvZU3M4Ug==","signatures":[{"sig":"MEYCIQD9aK1rzgLC41fiqDLlEevRNziJOBeTPKbbVGXaGM9XcAIhAPMWemt5qALBXtQj+0LZUB5dQffvDu+nI3Io+/Wa2e5v","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":426003,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgv4axCRA9TVsSAnZWagAAHNYQAIF60DYlUbNPDmrJtlXw\nWwpqUeKMBYk3oPxXVwuCCIep3mX8cIB11kHY6n8NHL+Z/Pb5p1I6hd/JBcaZ\nH2+e/epkGOp0RPwDS5QiJ73up9GqCA+idfIOCu5saozDOwB0iWQ4eQDx8cHD\nhLuqIDTIz9BTVoFNE1SrI3Tu0vY692Q1KunDU5xIyZsyUDqcy9lTMP5wHIps\nWz9yCyeMa/yeeVI9tO7QRIrqdh17JY47zRHrQcpZ2rv9I3STlETFvzn1eMzm\n5Weu+iLfuKWUZlQkR9mHazjbTJmwqzCU0uKReon8Xm5FuKq040qw7i+ghD5j\ntoXbFcTDHqHoPFNu0yuTxdJ/KhQxb5NeaKt+U7/Ek9kXCd0bgcmggS4Ie+ko\nQtzmAlo/abne1KcJBwJLbPXAwF9vlsTPYDCav9gdIjxQDKtwG4WgZQkOVFAj\nnX9jh/b5vBiSAHmqyR1Yx5IIAz9gu9KvmW6swmDw9YOAIDjNd/j/DIAaPj2T\nlSRsrl98PkTtZ0u1hqLnsK/y5Rc2XaOJ/ExfUuUeMAu3GGaQpEYB9WkK2TS8\nopnYW9kq2yZtnWiQbL6kN1OKLQ33RW5ySVMnjA7slyw2xUOIpY8ipSFXkhbP\nqBevbwOBNmnMKcpK03MEtxiqdcLcd8Mr5LMQ1kOOpBH7K8ddopaCpCsG8xDK\ntULe\r\n=urFG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"67ae84fbc1a07410028337abd4b09de27f64abe8","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.31","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.31","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.31_1623164592955_0.7167552117861387","host":"s3://npm-registry-packages"}},"11.0.0-alpha.32":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.32","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.32","maintainers":[{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"cympak","email":"alexp.webwork@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"aa25e38d70ed03d892f903a83699c9d50422f799","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.32.tgz","fileCount":162,"integrity":"sha512-QA8SM7OuRilRKWBrZ846aD6ZX8HsGTDwuFFbKUZ5Qdx239jjB0nGoNqQQkOKeHW3uLk9waOKfr43YmxS4awPdQ==","signatures":[{"sig":"MEYCIQDCOrD21NDFCfuydX/qkEOfsOMPCD4YJbkTy8q6H/koXQIhAJm9JR5cYyoAgsKAvt1UGD4BnuK8XDGxKiXUEJFxDITq","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":426193,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgw5QACRA9TVsSAnZWagAA3YMP/2+lHM2aHGeQftwQ6gvj\nOMWbDIuomIelnyuwKimb+BtZIqUu5ug520HifKcnwPYn1h8jxZfX1OEioP7v\nidVqL284FsPKfFU++KbW6KGiYjJ0VY0zgxizlSTIk2UfoGqNRqxY5e27CvH/\nZ3+VOKaLvudxoO0L/PHTVKvEh6nyZRaL4gXXPheYWrekLcWyr1hs7Lww6jca\nVnW/CRUOdBR+NGaWcxy77/3M0CgThcdsTfay2d5lDZ1uSMGhgGauDzyxT8gw\njYvb20d4STIwGv1as3hjPkr1mA8vd9qjg5RwPnsO1pktQFv12YhHo1mEiili\nbNs5MFW2lsQ2QqnmmuXSfR84Kksur8HIuqsoq+SgFQFXXFpwpNJitdYG/CvI\nRBHf2o5z5+9gAcjdwH86blaPK1IboKb6KE7+a73k5HduX3lBEdtFfjAA9fhc\ncFx60DGHuUBNJsCCvxyW1NENBNjiJt4DAs30MZV+P0zb+r2ephzDaI8/zesY\nctlofGdbBKzIovPxMKSGWl4b/xnL+puP64ysiu+LqvX8kjoInihv7mY0eYbN\nc3Uoz/OGy9c2U3YwglV4FXGnukDUg3gXhvxhcb7IGI0L1ErAV+2M4sdyzW/X\nZQ50o8E1N6CQ6ySA6gRoW92IPad7LuFst0HxOwa1180OBUswbVYfksqqFf1K\nzu3M\r\n=HplT\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"1fa0f22b9b0e5d29774259c78dcdc8c6e7a0d491","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.32","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.32","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.32_1623430144476_0.1446889211949729","host":"s3://npm-registry-packages"}},"10.13.0":{"name":"@brandingbrand/fsengage","version":"10.13.0","license":"MIT","_id":"@brandingbrand/fsengage@10.13.0","maintainers":[{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"cympak","email":"alexp.webwork@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"bbkohsinchu","email":"kohsin.chu@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"2376f303b94c8bc861e71163719f1b3c91973021","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.13.0.tgz","fileCount":162,"integrity":"sha512-y0UEyaraH1dWeCs3QIAJS85rHakYd2iDmtVtT/Pe8pJrkAiqtdhxkHvkZjcOXTBEgmHMhnOIUIYfXy5kWfFklA==","signatures":[{"sig":"MEUCIDw1JRKQ3aDkUdLiaTaS7x7RquuF64mkc0dfOvrF5XInAiEAiWxzHd255Am8UsEQWkbm5KhdqclfKMRNtaOxjR4Rvg8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":422650,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgy2IPCRA9TVsSAnZWagAAS44P/2HuZiNeW7PFrL6KNYNr\n916I1RWB748jJBX+7X88Qcp0KB+bjr+MCU+WGqYsgB2iya78aGr/1iije0YT\nxWFF91cDiCyi/wlFiGGIGekmFuxJVRLiLCyvCTJsLyuLNLdAczIfyWEG9wLN\nDEaBeZ3xO7TzCsYqfLWMGAqGV1SDZxRH4RBzjycUgLYQH8ux9c8y5hc9iBEP\njHmjUtegwaqYWuMVhSiqDRjBeS9HutJLH0DexxWAb5nigs05Xh7Rb46rz73u\nAOiXM7CGE+nOPfSIsuJ3rEqkKAEGIClyYjxWn4o10AxWQPPGu8ou/FPvWdh5\nRjyYxQxHgxR8ZrYYrEwlRWrOa5tcgpiJIKsmUmZBOIOZK2Yif7qT/6cFuwqa\neTxCsmM6p4dhYnNPiJl4rHX31l6qpWgxtqoZ1RkehSI6ydncZ2CkdUW71VsQ\nsub70y5WB7J70OIBbC9YAIawislgFGWAwSEtKXafOUwbppjemGfjL523Q3nY\nEW1tigMTOsc0Q5e+0Xhd8OVj8Hf1Bu/qQGBf5eVONnUTf1uiwdpURiDzMcz2\nmNr0guTWqL8wox7D5gSm04c+Byw7AwM7olTy/5l4Ksz7XK/jJ7LWbQKEez5C\nZXjoAl94GlEmwLwW/vtWHkx7NkJ5+AkQ3hotXde2atRwH+e3MDsUEGrJImzY\nqDnu\r\n=ZW3w\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"7e98f832fd5a6ac6878ad1aa1ca0d6c235fa4d7b","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.13.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^10.13.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.13.0_1623941647331_0.7483956862738115","host":"s3://npm-registry-packages"}},"11.0.0-alpha.33":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.33","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.33","maintainers":[{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"cympak","email":"alexp.webwork@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"c9b9265336f05d3b1564063d16d08894d1c1db44","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.33.tgz","fileCount":162,"integrity":"sha512-2HnfIKNfX3OTAa1Z1KABwLEDhcCUFFpgf4I/UQU4LaE7/UbpjXYZql3lK+MAVCCRuuf8dU1DjC3YzgoxObxCxg==","signatures":[{"sig":"MEQCID0wDqE7++En38Dq1Bino1gS2uE7UiN/C8Y1sGo8TuHYAiBGE2ImxarWWQ9u5XWF5+R/F3saLecthzel6XgltT2miA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":426383,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg01QGCRA9TVsSAnZWagAAkTEP/0eF4OYufK7MW4zthEC5\ne0A5m0uGBjHLbfguv0Gxo61ZIp36r2jQ+OlaJuLWnkpTrtWq2aaOi2H8eQsn\niXCH0zY9WBy/aRwqu+ZMHTOXQnvLg/mY6e14Effa50O8YDhtGzNPm+yHcTf6\nU/AMOLQGfsWjadJy5vDLva1Ecbzngy6FOoLhOdbmLgQE9mE07mdsloqybP8v\nQYMEJPpomDIv0CaflD7IOik6iZqaQaaY4ZsWbyPjOldB8mXQsxuFeDIc9z1D\nD21A9s8Q/p2rDICLuDC0EqB9lzUcRlMDQAET0vZstljfu7LsWXLUOEZCK9LP\nKfiHJYMyZdlP+ZkwbujhaWyXUZRLWx8ZR5MkRWpF1DgN1Ma3ML2i7rkPeTgi\nOjilwhdFsrckD/CZWjZzYRx5CeZCa4QswHidkIL/rxHMbE/n+1rHOle3NjXF\n5FTD1xyS4F1F8YBmTQ1Y5ZgOaialVVr7ACwHOk/sxR0lU0nq93vxhydLSex4\nfccgRy7dkic7+t/qf8krtVJsTDTBUt6F1mwmLjSVwiooq4+a2ze45SUAxpvT\nAPg2dVf6MPTpHmBzfltOcs/T3b5o411lSEU4Mu+Rb2XiUl5hOD8RMqo8Vu79\n6ugeg+ewW7s1qMCgHaaA5FyLNfiur+u+7CUg96N3tL6FG3esarsmGZg2dcrC\nc8F2\r\n=uzQr\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"d6dc383091284227f07c4aa49bdebaf94ae387b9","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.2+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.2","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.33","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.33","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.33_1624462342156_0.6496717919466009","host":"s3://npm-registry-packages"}},"11.0.0-alpha.34":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.34","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.34","maintainers":[{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"cympak","email":"alexp.webwork@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"5c1c0328664ca8b123ce6ae9f1ba41ecb16b3df1","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.34.tgz","fileCount":162,"integrity":"sha512-hdwljpTA36Lb/JmmaqGgxajIsY2htio0t8fL7aqVkU5MgZlbiwtL9Vmxb7EyIQxEEHEyO0F5Tgk/ucCuYlxlwg==","signatures":[{"sig":"MEQCIE6cKB0fZhIFYgKKaGGRJV6cVMkwA7ROcgjxunaRPm56AiBkPmd32vxX85LcEED0LtWAWhxeHbVTADJ8rqtwOeJ/lw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":426573,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg04BaCRA9TVsSAnZWagAAEi4QAJ/y7rWBggc9hww67FMS\nCYscUP+MGtCOUT3tmxZw7T4aDFlNwEpTNHBSez4Zq9fPFW6cwsAGMHIGFs26\n9x8zfkam/4JoGrCMtyuWD3GmBY751ipDZGHqj6nOHK3pWyfwf8aFWzR85t0n\nEQoKbNnXTWkMcwScCXB2lArT5qpkzsi14st1zA/NTMwrsp9QKdnT73aXxVqY\nH0qGy/ABFJZghubbVYY70aF55aBxiXDGuU+BHELYAKiv7myZW+T7W5vbhWoA\nEX9Miv3UT7ExGRQ2hmELXSfsMvEMd2lkltNCcq8zKCGk1RXTSF3kY4/s3qm6\nruuHgM9w4XPEfp+mrvQdoQEu0RTm/ct8Cfp+rZUwBkjAjvmWovX/M+uogckZ\nLS5sXO+gTAA3myK+Yn1Nc27zRwoHyrntwlE3vDBU/5OzG+TI4og72RBkc5dI\nNAizB//IbpTCMzm+UIm9ZquVqYDUTpcRsAd0pYQZ+0ejYZlMNfE1EGt9P26J\nH9fLDhZ2Xoj7040x5odCxG8f9kREXWz1JULpUkSZRS68gLfb9nb6piD0RHsc\nIV9hAI0CZIpVJwk8hCq5FXkok6B3jvOmaEfjz8VfGLel1kZYxGgZzuwG/JNu\n7IkWw9i22tCWSftFJcbuEzaqcNnWsEE2Qzc5dFDvwcmBJOW6Z28hGcaTC7h8\nperm\r\n=dHp4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"24c2dd5fc173b14de408c046a6680507c6ae23a0","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.2+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.2","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.34","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.34","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.34_1624473689718_0.9907210343002448","host":"s3://npm-registry-packages"}},"11.0.0-alpha.35":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.35","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.35","maintainers":[{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"cympak","email":"alexp.webwork@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"553332f89b737cefa6a2b9e93b1dc937e169f8a4","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.35.tgz","fileCount":162,"integrity":"sha512-oDMKqOYAXGia/e25CyLDjxBpQ/MYYrMsQdx3va2tJUkt9euMniNKmSg+I2LP4u+JBv7PvGM4LvrW65aPYvzzNw==","signatures":[{"sig":"MEQCIFO8t7Qu79aeeCb91wMpP4r9pq9wRao+/OWFMUpzX19HAiBlYFt8H8Pd3VWIG/WAUEpl3kJ5/gWxy99EkcVXaHj99g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":426763,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg1NbICRA9TVsSAnZWagAAUC8P/AnBSGusJganQGU95gnz\nhK1hz7OL1El9AD0PcSZSO78bhfmJRZTlzjz7hzEwN/Q30AjscABr5ExEy3Bd\nW4/ds/ZjP8RPUlqyCoYnmRR/VhEvZOGxaZHCm4j6/0vVtHA0YrMEcmV/u7HN\nPQ/8d2hnvRlvQlOKYmj+n744gn+6jooIV36TC3ubUBX0z6UKj+0xaCcflbaz\niNPrVKLYfmZSOQo+GhDYpWVVjR1RCG+/5DVImZgB8KF8KQ6PpTEQOWzt/rGy\nsu7G/e2FbOzPDVKrglrb6fQDHSzLf45FfXyHAPaZTPomI8mu65xv3E96vNBD\nGq/+Zp3AT6xG2WxC/r9cNiC/gOhE5EMG+Jhs0905cIuMr+y6BSUJOlWgiFpc\nRf/6c0IpmyeXebCdfkqkb0mijeuji9O7UVhGBqVtykbMNMaaKx8yMIw2/uVd\nrSf4Ivt5rGHWIEwVW98+oPp6B3Ve1XNqRGod7bO3gEWQ1zy+21PzB5tfVNPX\nQ1XZVaSZGlSEcvFd4Gum5oa0P6IMxsh3uIIXLcr48P98kKvTRHtOiyxq0+Ok\n1xMwQxIpKncwVtBEjN2aRYyG9QdN1+58NOELINaEwrxII88SYHyLEfewsZwI\nLo9/hPsfvJLZbdCdCDpqF/g5NPI5zSd9IO1V2rbZXVTJVKcWeO1Fsxe9vhAb\ntnVn\r\n=8WCg\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"f1099d91d9e6b1c8b427ce9088574689c7e835db","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.2+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.2","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.35","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.35","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.35_1624561352310_0.9299664089356681","host":"s3://npm-registry-packages"}},"11.0.0-alpha.36":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.36","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.36","maintainers":[{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"cympak","email":"alexp.webwork@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"220ff7755fc5b59f20c81beb3db13d0516c0e397","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.36.tgz","fileCount":162,"integrity":"sha512-fwz3M8voPp2IOWo25sXEY6mJLYQfz77VL14MtOADB3NRY9r/AElA+3h8wYVcMeM9+o/rocHPlq6PdY4LtKTrUQ==","signatures":[{"sig":"MEQCIDdyW1X3HajZhTrBza7kPSVmu2RNCjgg+nIJ53J14PxgAiB32vOEwIbMgHRuOc4awtSDYQJC3aNjrLbn+/hwNBnrgg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":426953,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg1fDtCRA9TVsSAnZWagAA8AcP/0f3yn2xh4Ksz7gRachB\nNrQ58qmcxVCADOyLcr8TetsgdzIl14Sfq+BDoC7yig/jqJadoKorypCSlOxl\nMr5/kTW54CytKI6p2svjm1p2V/vwRBes2Cpd7mLdZPT1phdfinvGXGVb35Ne\nYpxtOopakIOg36aGl+2a17ciF3trGHfJDDYMfG6OBiFIumSgfuT3KNRBy+X0\nllaVBvqHHrPm88lx7d2b2Kj86IojjXNfXkyW/I3m81lcXjTULj3XY26sDbM/\nLFNp781IwzBGTfckQ26fQqemAe0Wu/22S8vMOh5+hUMfwiBd2VFeA+L0bAkN\nJ6HfOI4552atZq/uoqPdVJK2VjguMpUc/Zj4jbAmtcEHF0fuDQ7oaMju5rQF\nFzslISvNWGKbxgD6ICLS5LkyxVd++MqYeuALys71pQj3z7uq2EG48VR45rfC\nVp6ztyFKgAvL5bo5nRsB/S5dSNzS6KIe78DLo8PC9V+Fhq8TazpdNUWvjzq5\nBIyaSliZl0jw+mmVLS8i4plF1mbri0kuLma0FyxLpsWPGOyGVvzzvQ88P1Vv\nxv6oaNL+U5tVyG6EgV6rWtP/OApctM7kv4msAZHQNwwwrDi3YZhilIKva3M/\n2QaF41uSAnMN//amiNXfpiofPS2+5HDZzhgcoKdwjYq/X186xZmVSknppgqQ\ndPDd\r\n=cetS\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"47ba440da492ee2fa605400447d1ba1876abf559","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.2+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.2","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.36","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.36","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.36_1624633580612_0.4486180008213301","host":"s3://npm-registry-packages"}},"11.0.0-alpha.37":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.37","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.37","maintainers":[{"name":"cdanus","email":"cdanus@gmail.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"cympak","email":"alexp.webwork@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"e3fd8a195d2dd44342dc61c765dfef0521b2491c","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.37.tgz","fileCount":162,"integrity":"sha512-d3j65WGULOUZh+iM3IeGuqttJSqEHrrRSgNnmvVJT0ZNlEqknPy3NkUi84cEmqVIVg1wNWaSNcNF1omkFPeb7g==","signatures":[{"sig":"MEQCIB1aj+YuyfFJGpTiUQM2zPgRNQ7Pr20MpzFCpJxHNBX0AiA9eV6G2TKhqZXxRzFvtSWvEE8V7fmB6HNyj8WnfsGpiA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":427143,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg2kkMCRA9TVsSAnZWagAAGycP/idxzQxA4dB8TylsPBZH\nefe8MSIm+rsDuMG/nz0JwEa4V6KblCTOO11uQ63aBTWS3BrzlywtcKw9T4/i\nlpNEuwYcUwJ8FNhxtmBaHNaWU6M1IqGVXkYXGf/RSNbFq57pD67fCtz0uuTC\ndMvV//ZeeoGGN3nvROI1C2uW0Opk1FBzeeuewzPgW6uHaB/xUCmowRtOaqvv\nqcL0+X33fjdOp6UXAewTK5BEMyIGIPVjE8I+u7+VC2VvnKrq/mZ1ZGEOsS8e\n2wxDXbiV2K1TwHXCmExxjzPqB2DQiTZS2g/pLi1AittlDE6s+wtDBgivFRcT\nGMaonj+zNIiwyu7U0PG5srPU1uKtfAtXDO46UQKuaqTfFez9vwVDQpyTi2CJ\nz0wvbzh6a3PitQHpJa9gK+PCJI38xY5D+eA46tOS/ab/j7viBt9gbifgGBqm\n+L7cAhBcqc/7LdRAkMlU3BaAoRaDpNXe+Ln72wvBsJhpq9bCFMT5SzuoQ9H4\naEKYuxkhiaZawFbRan7NUBC5kISNmNl5WdxdJrCrfz0K4iF1H+r/rw6S01/C\nqoHiMUuTdQvV/AIkc3dfUDgUfV61N9FHltjU1b3PKgOwZ84KotKol5rPJUdU\nK4nsYZeK56riIPvHZZq9lQGikNWjUrI8ZuwKrBin6EdUrdVp9cguLHuALzX7\nDETr\r\n=0FmX\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"da73d7a1f0f77270594c7d8f2415bde4a8a3d0ab","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.37","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.37","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.37_1624918284294_0.42066335729069815","host":"s3://npm-registry-packages"}},"11.0.0-alpha.42":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.42","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.42","maintainers":[{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"cympak","email":"alexp.webwork@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"bb13fd185195c7e53bf117e5ca93ef4e1b968238","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.42.tgz","fileCount":162,"integrity":"sha512-7qeyUkfFTOYvbrK0Bxu0dvzL0OgzDvpEXXzanEFB6UbCB7GxcwGNkyfNzJdZn5Na3XIqGosyJwdhBfYjDLoxCQ==","signatures":[{"sig":"MEYCIQDHcLCEWslrTv5HdEeE1C21orJiiB3dwpiQZlYMhG9JOgIhAJRFTDKGcdgvqFC/0lxTTJ52Y+9eT27juVBRnDwlXI0o","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":428093,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3jqFCRA9TVsSAnZWagAAQucP/i2hKyRI7rLG9FWh97kH\ncmHT+5M96bD5aeyqgF96kj3aMjSeIUhCJUCsCAAv2VGJ+6j3deRhV3v5TZBK\nsrddnikU+CRgKEc3zF6lV0GslMgz73Yx9cdSIrTv8mb3kF005oithNJhkuaV\n21TfeJTOPjCmkMGggtDi1L0PG61JAp990wmfcKJyhwBpsm0PDdjm02ODg5JY\nvRy6DnosKNuUGYYdh/N00xRC0sDrssYXtD3l33sMg5Q8wNR/1gI+j4vGKzJN\nCRZnRDDOvzxxwGEeWhxJOR1CaABoZjHzoLjhLnsOyLn4Pz50GUVzn4tuzoSy\ngrZMyR12bTCS52FAC3zrHOF7ZdXFHjMj0QOItgt/0Rl75MpdXIQ1tUp29bx4\nqVfldW9E3A/QpuGyKoR5v92YOZIpU2x5Gs/QNL2FNvL0nn5t81doOsM347iF\neviW80SYziDsdPUH/VPFea1qU2+NGQim+jQaEM/i2rbJACQghXln3dXM2oKi\n5oYxHKfAMjSTg7rDpcd/7JGek1uiTZl2YWqS6A5OJc+Z344Lvt2vBQ4gr/Nn\nx56JfElStTMrxUXk1ZlrfXV4Guh/rHibInXDcAMiqVrMNcFn9vxvvnnNwwcw\npwEFdCj3xf1e+pz2gb9Tp5SCbeigOKKuMGZPIMrjJ4VjSSIUjuAPpOdZqPUZ\nPoFi\r\n=cgiO\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"4cf8f9e11250fba476cb3475d0c7fb3dc01589b6","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.22.2+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.22.2","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.42","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.42","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.42_1625176709077_0.26503350261007097","host":"s3://npm-registry-packages"}},"11.0.0-alpha.43":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.43","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.43","maintainers":[{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"cympak","email":"alexp.webwork@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"a34bbad07e5901d5e427570f2e622b2c902968e0","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.43.tgz","fileCount":162,"integrity":"sha512-xrFnFt8YiNvDsjrlgC4OKrBPWQ/ZPVtPaFNPTxyjOZVw0Uefc1dRACPJPHyAgu0Tvq+i23Cwl4nl0Mm3xpDAGQ==","signatures":[{"sig":"MEUCIGTKHeqfmgocPa3tpA52A0dHsRPbBUel6JJ+J8yOHDaiAiEAtqJz2msoj0bi9iPDFxcBFDSvPAPXtrUzO3a//b+nq2Y=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":428283,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3jvPCRA9TVsSAnZWagAACREP/1hGwzKEcCuf9FEzzYGK\nVlhJ0kvMNVPZhJpzRcZbUDazKKV1fdVybmUroDZ8uDCY0AjMfx/dCK7PVNMs\nl9aNjziTW2o4a1/UBpTwGTT2VyeBGV2VJr05bxoy58eUZgKef8M+HfeFxvVG\nIX2d1n8+pYeCwpUYqWoN3CjeM0zjejF6WrA7g4KYVCdZT6P278foxlL4wlpg\nu/GoZOQRbIBI+9ZhAFKIKEXgxIGYoVqYapqsuPbv1pyC8PAKXYvw+MYeovFK\ngr00S5qB6cznISi3rRmrIQvWn5Y6Ubv0JPeSs2UR1TrdRxiV8eptjUYcHT8S\nFB0otBfq7W2ED1mBKqhWofRdRXq4K+vux4p3yl5MBQOZmyZDw2LZSIWy+cZ/\n4ZkebgeUzpQx9wJqGIVQ49h1tCVwcPuwmabxu8Qw+SP6PfqG4VuCAq49B2Ur\nScwEQrougHwLBIN6I3PUxhXLl8qyoG+wAJX66YUzG6f1VhmtqjIFw11mUkMw\nns9jVAHZfjNzYZH1fPOIW3IFwR9ue1U93oQp8GeOWWIOnVfLfoyjWa+MgCYD\n6NYyXcNjeooIvftLfZnZdt3T+2Y+BpAcFYxAqSM6f2MJJ/sjh7i1nuN2n9iw\nXycZ3yBuLQQPWXuHAJm1T7I8jJPeGjdl3+3uoW0Qz8bl7g4XWJ6svX67/4f+\nWKgV\r\n=DWPK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"7a36fb9f4ce7d9b7e31f59281eb6adf4f110b221","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.22.2+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.22.2","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.43","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.43","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.43_1625177038981_0.6537733464852211","host":"s3://npm-registry-packages"}},"11.0.0-alpha.44":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.44","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.44","maintainers":[{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"cympak","email":"alexp.webwork@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"fe47e5435bab70ce9f80fde4a2cfef4e27a7f2fe","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.44.tgz","fileCount":162,"integrity":"sha512-Zio2mJ1I7ukDT7YyJeh7PfZIQHOIGJBHDxytTQ53OVEnfYeFLNYZXtRKNf4kXBJdbazGxe67tGwsFtDfoGRVEQ==","signatures":[{"sig":"MEUCIQD9c9zG/KsUiMU/VoW6wRePuVsbqWEPZKw/ErW7XT50nAIgVY5W3XSQyOE0okRNbgyKiiwOEo5vjyY0PbcSbmBHGco=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":428473,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3j0hCRA9TVsSAnZWagAAngAQAJ5I0XRco55405xBjpU6\nq7ca84WCZRHrr7oAzV4pWVn26hp25zAqlBvEBB3cHN65ncuySFOivdNP9oJe\nQxbMAPraI2rnQlV1IpQ1stSxb7dABgs8JqsQ2UvF+Ap2hZI81J1RjojWuJbU\ndXkwgcfaZTr0/HIY6vnR3ymOU31JPUMpAfFXmtQgj8cO2eZIOJ55h0CXs3L6\nGzWod8st5V2N0ypqAUzH49JG/rz8asiL1afDYTBrWCZkkaw1tOZyj8NneLgL\n41nmTGkI0UGwCPCcnHPpswlWGzbQ3/4YnvNKGszj70EnK++e9i/B7aiWF481\n8TIp8ZSE50V1jHVdpR3V1O5/OiVa3B2jmJCJ+bxz9SgpZkWVIyv7A5R5t8KA\nMcd0sFveu5Poq82NfzjhXIrPYFm4ktwo9UmI4CYfsJFpgyOqoEOEwMfkC9ZF\ntjHugNq3Ua947m79U0eSMPqLJjoOvj0+oUfqj3FxF0+ea7HCryY75oaCWeLf\nk+NzRAJCm3kKjbegBdUko6TNO7d3oau3f31YnDh1fFiiF/XXTXAhaTfHP5/f\nZvvvdS1kYGC2PpcFNx6X9ykQVc3eKM4eT3dOB0CzqD/gb3ERe3eNhEM1PN8+\nE/jBypuRowady1PckBb6wzGd9GIW7S6rZmDR8GA8FT7uFlABOzayDZW0BbJG\nhZuy\r\n=dv0F\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"037f3b12f17c1a1587890e21c2b61f6de07110d5","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.22.2+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.22.2","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.44","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.44","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.44_1625177376755_0.24030798872706316","host":"s3://npm-registry-packages"}},"11.0.0-alpha.45":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.45","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.45","maintainers":[{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"cympak","email":"alexp.webwork@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"884a16cb641ea5f3e4b0f52eb3a1a5d5a634be5a","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.45.tgz","fileCount":162,"integrity":"sha512-ziRAQIllT2nSMYGG79WQVKg6o9r1la2SVOY8wjSzF0ZBEun7nnyoTAxfjNv0UidjlXE8N1ARCPYTfplt4two1g==","signatures":[{"sig":"MEYCIQDhhRW7QnXdS0vsrNt+nTHZA6dFnsIiJTZ7RDXJCBIAkQIhAKIZoFHKSwzfrzF6b+f3B4b0/yVVvVOoXzhwzR0DCVas","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":428663,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3j5aCRA9TVsSAnZWagAAdfgQAJEwAcGvhBkI8nv0cvaE\nnET+MJRevnFAOTbVpq5cFpgEKdhQp8WQxmGa4fg3L+6RPi/Qi7zTl9A5HMEs\nYx7FdWnYYZz3yAkxNylGwU2RWolsKQQ120SvroXNnCHoS9Bj7NNku+mLzGl3\nPr84jpKIVS4RgPvy7TYZhFhIDbNaUpLFk9yt7MYAAyvlwOsslN/R3aljprW/\nAmJgoTvdDa+Ye0jLsZ48xZst2jMcOA7YIWWEGs16OfRiMUd2+Q3+H0j1kHrt\nRmuzANZ55MqBHB4OzUAtkaDwQllSeAcuHSWmVMkrvsEiE8e+Oxr5us6sgVjp\n45WBKI4MrOTerSq3C6E+RbSp+tGQJiAJ1EkM38AIsBruifC8ju77YoDYSyh6\n1/t207O+qrQQQ8Is4UxixWR2m+p8ol8SMYaiVTIzLF/UdEFVrvWL1ah07QxV\nd4noaggbfZP+VoFP135lvu06Td4d40ootCKmM8Zzea6w6dJ3Vter/HkLOYHv\n99VwvXGVBDfwW6wMyP+tBs3MKB7E0I8p7iiZ/r4Mnb22iUM99aXKg3sCFYUD\naJkoi2xicNzT3sxFip4IwoTkGtwB8QldAhpo+GHJCUC6HbEa1wtcEahISZmX\nLS1Jt0E+IZyqW1dh8+aSNEbFNcUfxqdhh/JWNqHP7Y8u7akT9UyOSTaxJiDK\nQ/RG\r\n=IUFs\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"6c81e33794856918517abb674e4e5996077dd4c9","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.22.2+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.22.2","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.45","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.45","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.45_1625177690356_0.022095842501393737","host":"s3://npm-registry-packages"}},"11.0.0-alpha.46":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.46","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.46","maintainers":[{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"cympak","email":"alexp.webwork@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"a37a35896490aac2eff85ed76dcd733fc78b6708","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.46.tgz","fileCount":162,"integrity":"sha512-xFm9pStz837dOSr4qsCRRKBKBQ9k0AUxnLFdLPrX9V0fn0B40RjJwQSJXz2nnQFmLW3AJRXPE3dUDx0Mpd8sag==","signatures":[{"sig":"MEUCIG63mwRWjUVDRu6b3rboImWQFuu4B0Lt3FRjn2Hgy/tkAiEAmWpcnI9Rn6wISvyRQCx5BBam55DEwmoTUnyS1sq++g0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":428853,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3j+bCRA9TVsSAnZWagAA250P/AixC+GsJL39aTqGfNca\nObrEf+RrHkHcfTrKH8X7YGrzvF+LYoRG5ifDnuO7Qd7QzyUu6wPSn7dE768o\n5EWlwNBCsfYa9HBF436hc7ReWTmUiWa/FucVPJtk/sQuU/h0ABe75yd9VvqX\nsS7eBUXTACBNRxX+ig6eD1lC6JsE8UP038qhftGRLBEBOxnr6wlUysE9hdZk\nruib3uo535+1pcixtw6pu22M/onnWeoH2s0eSieeb6bNZt1ms0uw3IGs+tyy\nYpic1MNAOuSBGxEW1GaiUYOWIf0rfbYwpvmXjv2ZmJJ0tfGOvP2s/mBgvVMT\nrNr/OOE7iLu1YDE6gbdWscGsaimkO8+kkz72IrwRKhYRgpEQBkkTZgZ2S5hV\n8KcafCubZz4w4vffMbqgNpaz4JeoYGsZEg/IaBB48N9/JKWuws0vgbQYXbZu\nrkW/HqX3p1bbebTnYAKtrTKKNmh7alqb4rrEKUW6owfFxvAYMjBfVHlj599C\nIWz+kuKt9PfM1dfx0jMfm4955KPFG7dw32IbTFU+zfPM7HTq+fui+OMX6Czu\nw0DO5esJtq65+0jGbt/97R07Hl3HVa1qIOQ1NLoo8gvomgfn27dok9uqTd0G\n305iOuXXGlLOLUuZQwj8/ZuaZXtmFuDbYCK/5CU73ImUGzIQQUMCnUKvV96p\nkgu0\r\n=Mz4S\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"daf06da63cb2cfc0914d1d97d67c30e045bebab4","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.22.2+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.22.2","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.46","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.46","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.46_1625178011416_0.1763209932130525","host":"s3://npm-registry-packages"}},"11.0.0-alpha.47":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.47","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.47","maintainers":[{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"cympak","email":"alexp.webwork@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"ad0e53d4ad335f5c5052771b215d94f1a8223e06","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.47.tgz","fileCount":162,"integrity":"sha512-WanvYUxnUjKg9Y6iqmU6FABQ5Yc16jMsgL5RSeHLQCimG6mgsGlsBAY4MkhOKMI1WnfR1smfTOo1pii+zz3TQw==","signatures":[{"sig":"MEYCIQCJGdq80auQMT6Lntgr7B7O06oE7c41oiD+DG1c7s8PGwIhAJZbRKrpsz6fw7oasPrbxYHbmj5gO/06jtdJASDdcVhX","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":429043,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3kDOCRA9TVsSAnZWagAAw/UP/AmAbe3TVA7D9n+buZ2n\ndKzuta2ZhiFBn5M33B1X/Jb9vNsW8PpEgQaTThqKoo512CPRFNZw1zwhBnjb\nzMBBHjUJprn8qZuNRTRtmlke/czwwjIyWA128m5TdQ6tKt+Xv1IL0RV6SOwH\nZvuXXBtTiq66ioPtUl/7Ir5kWCrJ5DSfZrcSyS16V9EteAusYkH7HntnZfnT\nlMpSCrtBUeh9k0zO9R9qWvAenMQgqV1gREdIR3JUDKS8CZLMRGDhQlAWl1iM\nVIlJK0Lccoa/huCR1EO6lpncl0z5ryr/eZDqMqrsXYDxx+Ofc4WAIOoMQL0c\nsWaHD9Yhwz3Hq4oG04QTyil48zQR2cNXU4RfmxnwoIeozpQ98/20G+M1U/b7\nTvIewV5LoA4J9WSHGgwswVeR+dmzHDdyrOaFvl/ECJ2i/dEaNNdLNei1wx11\nmuDx85DjASu7bAG3Waw7eifSkJwSIKu+XYlz0ghruSYN9yjt6OuQSSKOSD2U\nEv5iMUIHA0Dkv9B0WDm4aCN110YAMldZ1588z8zr6AodKSZyTuoSame4nKgz\ng0UOELbsdPrl2/JGYKtGtcnQRLt6LD66O3K/UPlBGyAvy27G4GKTlyEwHcU9\nCvnkX4sboPm/Ytyssf5A5bPm+xhg9TjGYEETipHMDddBaFTB7qSfsbg8MYRX\nenMA\r\n=sKtN\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"cfcb466d42e4228a473c6a13a02e69a0ca9494e1","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.22.2+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.22.2","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.47","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.47","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.47_1625178318045_0.6398817580137326","host":"s3://npm-registry-packages"}},"11.0.0-alpha.48":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.48","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.48","maintainers":[{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"cympak","email":"alexp.webwork@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"f74d86a7ab8a3c9bcbf4c8d3d1704e0f735784e5","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.48.tgz","fileCount":162,"integrity":"sha512-CUy0lax4qj8aJZdR8WZcZbqnI2J1Ilb+bpectJJU54mT6lIMw/XEoLxkFQU6IIkjMmUKGYp/IpSp1BjLjcTBpQ==","signatures":[{"sig":"MEUCIQCWb4ofZvlJ1eghuZkqyDsWj1eGYf3EqoFZ05AzS8lQ1QIgd84Nu8OlJqPCEYZHkyTFXS0vD2qrGD5w0FjBeiOPqYQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":429233,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3kIjCRA9TVsSAnZWagAAC8IQAIODQIEd5JT4wfgD3zN9\n8o+LRMq6KyLHXWvq4mKIGl1aEcLb+/gFPqA0R51AhlKoVZqeqkIamnvBhSGV\nHdwbqUsuQXe16+j4qcj1LbSlnNIeSFuBTrbVYAVQX+5vQSQ5xTwd27QmAMPj\nWfhLvrz9eZD9iPt7hNUl9Q7XIONQoT68R2NrF3mJEyTVZr03Ha+yoyWlgaGi\nkGpZ169u4JPavAwgof6zAuOpDXoJCjvLSW+ohSj3ikbUn9CbAM0me558O858\n+skliwwbx/SsmrwScYkUr5Se+DFqNssJGTJmqjNewPeuomhxXFPE4UWCCGsf\nkTExDFYeB4HICpEZxYGh/0djTSmAhlJy/4t00YoAD+PTV5okI1NpL+93EzoU\nVpjNtc3OLTBlqVa/GJ4QuN6JNDiIhiS13nSsMu9nA0ZvsC36OHGqsb1CvaMv\nvyhVASp6Rijr90lJ8R1hdrcBvQdMbZ8w9pzmlDxdMkcvuqRiXmcmKq48OzwT\nenGeVAbtOFqVfYkqnjzcCAfkJ0tVTCtzGFypVBT92Z2w1TvU8eFrBQl0dFkh\nfsG8YXCnFP4u3KiFLnCirp+p8HqmpAPHBoak/zMxMjNU+9mNwR8sDAJ/QL1i\nEDStrMr42qgoTyYIV9WDwxD2f6D6/qji6ErcSR3Wa3Y575AEbCW1Ce+vLsjB\nOKR9\r\n=mgtg\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"ba049e070eecc23215d8af368ca4335c98044377","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.22.2+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.22.2","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.48","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.48","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.48_1625178659210_0.3865843005874343","host":"s3://npm-registry-packages"}},"11.0.0-alpha.49":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.49","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.49","maintainers":[{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"cympak","email":"alexp.webwork@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"73f60462651ee3e7189d6fb774bed4ed9ff009cd","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.49.tgz","fileCount":162,"integrity":"sha512-F4vj8GxsAGK0/Cj7XIWRXrVqi9D4/5QOOC/vFgSPHItySMiEYkEN6IVmyqFdMYtueHr7G+r0gQ3HXXwKRlwQ1w==","signatures":[{"sig":"MEUCIQC/XYCx9M6iMv7PUvM6XBaGJE+jVRj+dJnBkU1KKeohZgIgDX1VBCAf+JxkhM0ZEUa/nADdX6SG/qOCB9AdvVpV0ag=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":429423,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3kNzCRA9TVsSAnZWagAAogcP/0nZxwyM4UzYsdvx0Unm\niyUT2JQC1ogCHMAqegC4YgJ4DvBkGosXL1amvWcqD4mFKL/NXorW6/AX+QmJ\nMIKPSH2X/erDQJCa1DnqEbaZXBAbZ6/JvbKDJ+WOCyt7UlVjwRtCeHJSaH9Z\nC5i1hLap61OzF3HaOp568Yrv6bmWxWVFzTRnV1p0HQYgDZcZKBZ8tS/hbpx5\nM3APgOM0apT1UK6RvEYzun0IKFeh//IVoPbgQXWatGM2pVWnEI65Hd/vdd9D\nBIJKOzoubjYuopOLgRJ3uVtTaVhUXPNxUTRJkaK+QWwke2ctLjmpmvDC5mkl\nMgsh2k1yg2ztrPwc0MhhTmBaWeC0MIhOgAOKSl6k8CsB6EKI2toTe57Imd9o\nISAvLYZa1en/GkhKy46fAiBsxuCzI5WzFSaVRGGklMlnvKlRsiOy+Yc9hpgQ\n4H3jGalV2i00d8NYKrxvSQJ1FjSltjXNbZokHTpWyvqHmOj5O6HXHB8ERxM0\n2N5WT7voDmchyc4xMIYbksfdJ8Roj+YHoLMonfDHo1wAqkNNFJfRrN/4BQ3N\nUEJK4UHMv73BhIXElev/WH/XHyDKXtrqr4VtjotTP6EnxfuR0SMFeLUBnXf7\nQr9ZYGm0EGJYarSD33MjrKwlyHMl7YspYKNRQ84f+GPBrTpeCZdcCiJur4QU\nailH\r\n=6yXe\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"7114fe8c31d022d727ff1731d914fba3aa2bc25d","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.22.2+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.22.2","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.49","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.49","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.49_1625178994554_0.31966519646428826","host":"s3://npm-registry-packages"}},"11.0.0-alpha.50":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.50","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.50","maintainers":[{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"cympak","email":"alexp.webwork@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"03225b224a12bc133556f63a75090624ec745a90","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.50.tgz","fileCount":162,"integrity":"sha512-dZao9I+eV7KzggPIuX5M3O9k5CJGscYATsuFl/HEVk2chj7/+Ip9bdmoMaxaRWgPGdN7i78n+8beRtDKQx8NmA==","signatures":[{"sig":"MEUCIAkFagdwpQkw6bAwOnwpVpgIPEvkcJR1QYBGO2PkmH+8AiEAxsB7Bd1LNdXtjJ+WkcntV+fH/tLlkvnkUVJ5iPKByPM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":429613,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3kSxCRA9TVsSAnZWagAAVekP/RV6D0JozsJVwk7ynSMR\n0HsIngdZc9w295pAQltEohgHCPoE1PNX9Q0KlF4JDuYX9bwXnBf5db7zaRGR\nkrgregW+d9ZmM1qEOiHBqE9Y5t4KkJ2cJitwqCE5AXnrvNlmf0gxgIfeG5tL\nEfsnQEr6Z5Dxbmx1N9xu1V0k970la2GqytPdLLKCaM5If6wHvCByNTd6TVVV\nFKvxoHXOSV8aBcWr1/QvnMyWR+MIsPP4jHv+BVkf1Y4j7xJy8MG+bFTUiue/\nsj/aAG4HK9lwFLZU3OSfUzETp2jbTYWV4Q9z15Z6Li6klWKB6720V+pPXRjN\nbOsArpYSr49q3J/9fuQQVfucRc1StWNVbyYjMO9HADoAa3w1jG1u8Czkfdeu\nHZwwVmf6d51egIJ5mn7It8B3IOuu61jUCkkTgB0nqIs0WH8na8G0FhwbBgh8\nSVIWauUIkU06npD+uwYXSJNkYJiIOt3jZajbykURBG317cFA/749Cz8zD3TZ\nWCToguIfHv7q5AGVICEwSO0Qnwv6xILjXXdlxWiNUvKE50C24q/pO/uFDyiW\nO7Sklqobr7/PUDAF0RywVQ8A3/rJWB/E4cGXrutsNUOCKl9G91v8wzeQDoEH\nyMlHWO1ZPANwZ1S+MB3ztnVCES5AGeh1M0fDg7rzWXgVn9JeLrpnpXYkpsR5\nw8Ew\r\n=55xw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"76fb619f0d4124cf1beb013b8028476e3b278feb","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.22.2+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.22.2","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.50","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.50","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.50_1625179312675_0.9223721764712267","host":"s3://npm-registry-packages"}},"11.0.0-alpha.51":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.51","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.51","maintainers":[{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"cympak","email":"alexp.webwork@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"dcb6b19cde1a5e91d54dc75b1a9cb11fe8b4c281","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.51.tgz","fileCount":162,"integrity":"sha512-d+2h+eHWZqI6hNvPhHk0Je6VCr2853kiV5FQqXxtVsAOSAMJknB1Nc7sjU6ds9of8GbpL/L+FNxK6DnkEQz8TQ==","signatures":[{"sig":"MEQCIGS7hOdzBA1Y1BJdFlx4o6Z1mzjC9jjJD0nlXvhuRDc0AiA0Wa+Hv+wNGPwrKDiPBAvBiPZDnbpQw992796SVZIFFw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":429803,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3kYRCRA9TVsSAnZWagAAcBUQAJDOoeo48eEpnO7TR9Io\nvsDWCpNc1Nw1M8pQqecorcNalqHzMBHdBnrNXz6xtVGfpRfmzXaRqWMUAm+R\npvXizC5ZNh0cq16yMQTl5PiMeMravqWicnn/VfnMfppLeH//zpLsSRXLyd0c\n3g1FShumvZGYs0bAQKOrKNz4+R0EDFgb5obun8wjXRqQEQ1s6tbq7wIenXis\nhqdzhYugjK7SYiJodQQ3AoHWYYzRkplsQEXrtZYrcCif4guGNJDrPSt9q1Jl\nqsBqk64yMIEhXFxmiyAXj29XCpo7B94+KYVKxx1Lac8J3gbpXbgqbfrxfyyN\nHuNqoG7O/w+vXux/O2+p8ruuQR/CKSAz9T4a8zohOxWRzl8G3oocRvBpNGR0\nGSXsloJkKPWl6q/GlYmwWVLuBUsdIdxXzzGxkXH+kbOeMNomBgGXPigpnllG\nXAHy0zTalKfmf3iFJHrECAfjzMB1FmmmsYh/0SxdLz2U0lsgsiN3mK+5WTvc\n/Do9EEzK1t0BGj7b4ruKtFlKOPpul65NFSWNI96x6Mn5xNypryvLi7hclyjJ\nnXDBUiDMOuhVYct82ojNRCxawc8uWaIZe0E2EppoS8fo4K+XGZT2Bukqu+dR\nVTrrotRENEEgEzVgqxz5ArTbp4dLG0xJ7a6WPbtn+7pY/rDOmnf6AC+6uEl3\nTb3x\r\n=BMIt\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"28622b48093e839be734f8bae4ceea720f7e4ead","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.22.2+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.22.2","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.51","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.51","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.51_1625179665094_0.5642675994881994","host":"s3://npm-registry-packages"}},"11.0.0-alpha.52":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.52","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.52","maintainers":[{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"cympak","email":"alexp.webwork@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"581fe8d87ea3b981beb8757aa84858222efd007c","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.52.tgz","fileCount":162,"integrity":"sha512-4ao0tpsl6ZP9bB5hT+wwRnCP3JIqVFIVbTR6d192W3LBfS2t+K+UD7OYo9++RhPnVLiie8GJHMOqxfHwPu6riQ==","signatures":[{"sig":"MEQCIEy6F8TQNitFAuFs+o6YrOcE2UHsn8B4Rc91NJj0NgGcAiAZNPSHdWUQcSZMmM0ZoHSUwWt+TmtoKvUhgnE74N0UZw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":429993,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3kc4CRA9TVsSAnZWagAAkRcQAJHTVu+LRwrhW0rdDoMI\nqwxubA1cIbm7X79GtKBdx/FcogyLdrY80HmZygeLURj3kzfbu958N+z/0hXu\n/nVINpOxaCkcSxlMa/pF7bEVls36ql1/sdv/G9aHcaqIyVflyXxA78aCKbLw\nU6YMzVn3RGu9frret/Vlbf8YNS+nADFTVy5pE4JpBUaJfJr/Lk+8bzVHh1BB\n+eU2kg2a3qWyxPKYaoO4Mdeyi7z8BA1yyaTgRpqsQREzPmetyuew2t8SqPjR\n5ML12NXcJY5yv52rbu9KVT8eUnvwVypwBn9sVWKY2AwoJ7xHBMV+5G03IKvs\njb0+EYP1OoLXGKJej4Va8Rl1fEZ2/fjqjVMSX2WhAU3jq1pJ3EnmSc0Oc22D\njlxn+p4I+t2sV9HWs/tMItGhQGJ9Qcsa0HiQA0xDTpRC6VBBBb/bmFu2ownq\nk6N+QyRE1V4frVSSEUvxmexZmZCtVN7N1wtBlSWYWEpdHiq6+H4ocK52RcHZ\nWsHvaVlYxIjupX0bTenfVSMlVFAr1uBeqpTjMw9t7HQsPEo2hnGpgkp8AuHY\nHXaUGoyOxJCSWHSWBuL8y3UKPYB9xekEKz1JyDZ9WF8q9Vad2VL1ml5gOlWw\nRQOgq107XLZF3or40VYlTZZrZ6dLYFXrMcJyICrMHvRgAWiwPiVSnPTiweAR\nTSB0\r\n=e/Xu\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"c61b8abc59a59767131ad773c3c272b3a41f452b","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.22.2+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.22.2","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.52","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.52","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.52_1625179959900_0.39621478725918324","host":"s3://npm-registry-packages"}},"11.0.0-alpha.53":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.53","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.53","maintainers":[{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"cympak","email":"alexp.webwork@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"09ea931386a1693bed3dab4ce43b8fa9c63b4988","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.53.tgz","fileCount":162,"integrity":"sha512-6yzrPD2Lnp6OytWufH8kJa6Lq2Ur5f85liqM7k9l6VoWIw4drhcKdQY8O8oyhX0fo74R5fjmFZDH4QtnilwVCg==","signatures":[{"sig":"MEUCIQDuPbSHaCkKk50Njvs2hATG60GqrL622WLH0yOh3PnJXwIgXF6SOCMvWzyaRodNXLGIdOIbZdfd1fY1e3JZ1Np9Mx0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":430183,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3kijCRA9TVsSAnZWagAABTsP/RqUI3CfFhNRyB1LAqWp\nQram59D8gkaCKJowbJ9dWeiF9Kn5Oq6Wkmw04CXgNMQ2XWJYQ5CwjZfz3Kiy\nKKTu1V/Ki9ty6IgLjBXyFok9razvZ+qc/qGcgAZNdg+61Evu90p70EX5/D8m\ncrJu0qicHiVq5O4NC1QBZ1K3Y7pQZPTXeWieU6p36JFlmVshhvYp0HKy9q+B\nlUQygYhVC2XbfwfhLVx+12Flr8UEjNu9a64y4T1xQvbbZRB4XybLyuA7H+jJ\nO43bPSAGoxG265ClxKx7B6WPuUQyk+7a0azfYX4/yeZRJ+hndoyqYOUo7FwZ\nGHesnc59RA6DX8Mld5HXHg6tt4A6hGIap70cTeoYXCv3F5zl+jRrPsJfq6iX\neAo+hM1Wti8dnZmP23FDfLi5TFr1nvQ+0xnepINySuRUgEHNt6iRXHEloJVi\n2IgdElU/JbBPZmKxT0xXEjaw2kBYAoQubMNucCTjV4TMaGJkglRRkubXGEac\nduZYpVKZzP9mXKRmYvDJwzyfmQ6UrKMzZmXwRsYxDF5XifjydL1rPLk+HHB0\nKVqP1pAlckNsLCbALBooHeCsxUvjXlxEQOIMtmg5gy7znTJFcCsL9/aJ87Pb\nDizMq73KBk0ge8Es0hrtPSYRKkJh+vBDy/Xk1fyBbWKXMWxYhtPu62Mv9RjC\ndvC0\r\n=hF04\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"2982a218fb8943040a7cf9e23dcbed24f28a86d2","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.22.2+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.22.2","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.53","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.53","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.53_1625180322766_0.15771234587235994","host":"s3://npm-registry-packages"}},"11.0.0-alpha.54":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.54","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.54","maintainers":[{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"cympak","email":"alexp.webwork@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"f91ee3550cfce6023742eedef2344c63dbeae11e","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.54.tgz","fileCount":162,"integrity":"sha512-Rk11kLCmvV+lmskxHnVMNv1elrpZSKXfcETkNlyb5Nd9oQEELXmxv4MNvKCRrWEVx+YBKvmisPYRPyRvGOJuyQ==","signatures":[{"sig":"MEQCIAhuDq07OBbEeMaK8pzcRDpZi/pHI93QCv4f/C6VmwLiAiAGdWMamvmhQKd6zgfm3bp2PzrEj+/n4UwK/+sbQQQ3lA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":430373,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3knSCRA9TVsSAnZWagAAQjIP/0HH9a0B31unE6NOPX8C\nUIXddI/e/8LMv4SIeNloh3DPiBFL8BxK1ELoUJZUF+7MPkeYUKBQLadPKWy0\ngsd52IbKnnW9qd6x567kvYg+gQkYD0/h5ciajs04zK0ovXfsbXYwUbSnOq3t\nGqNjYIgVCVDbV3PDccKfR06xH2w2TZSSxu24e9eEcL0yDZcX2rS6fquWg6IM\nVutL9enyuSfsT+KWJGpy6zn4CZ/EJtM19YNcgGEOYv7BfIHpj3lp0DdOqWcW\nUE+sxsgX+hC8GqCSuI8Eqg+aNY87qRGHMMWPvdkZ+JLBCBIKHn5OJgGT8aR2\nVxf8e09fpOkk9YwSv2JGJHsnWCsl2wK9RTe9aj8JAV/cyd0ueF5MmRjdAo/o\n+RbzciBM/E2DO5BnvRCuM6O2/bCjT8GVpnHYx+xCKLt6t9PcNKO95AH+bAxT\nVHRDOVbFlog7jQx1V/9v3pdaJB+a7JcTH7fJPYluWj3DZJS3Rl+PE75oOHiT\n7CNhcg9m+ooy6S/9P0w0phCQWt3IpSkT1BKQBo70dVLkN/Et4a9Fk2raNQio\npvn1B5KKkFK5P+9WAYGY5wr7DfsCo2j9yNV5w3jVi28NdZPbC8RDM+fKoj14\nEYeV43jT6T9vJkQwPCdwDEifO0Hb1pWeyp4LGysxUhCyMRtnDnlyg803+lYN\nUhvw\r\n=vLc0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"d7047089d634e7ded56bc1583cf1a8db6411bdc7","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.22.2+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.22.2","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.54","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.54","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.54_1625180626506_0.06636629775803349","host":"s3://npm-registry-packages"}},"11.0.0-alpha.55":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.55","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.55","maintainers":[{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"cympak","email":"alexp.webwork@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"74e0d6716a8179ae9164f5bb001f9ac83b3ff11e","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.55.tgz","fileCount":162,"integrity":"sha512-4JZnLvekOBviZxfliQvse4v/F8RFoRrhaERAE8TBZHeYcdZsi2LeaJJByqjPv6Nlc37cSUHLx/VIXA6IpAtTqw==","signatures":[{"sig":"MEYCIQDhgfxpiw0otN0ETCIy7pBGdrtJD0VxNaoo8eDu2pRm/QIhAKRZZ4bgyLTZ11tWyyOsjxGHWwc+VBg1yNX8udbAjWk8","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":430563,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3ksYCRA9TVsSAnZWagAAFfYP/118bJkUj0ieZhSXXjHU\nFYj0Q1e9BqidGFw0r6Gk4I6R3AIfF2fWd1h6MYEkRAbf1kn4sBrfYQdMbWlB\nqufEi3CpOPPRIsbszqqfXwQ9YO+tSlnS4vA+78LcRSnoutWZPVuHIDPcd239\nCZDM/XJOb3Iw7gxqnTOls3Vqf4KITYArDxCP9fOErN0rkKyR4YE+Ff40g7/+\nf7RG7p5JfgHT92z6zbSk4LVJ5VuQZgA+SBm9SwPFb3IsGkHLJijFq39atPNq\n0Zr6Zb6nZtcn0WX4tQOWOjE37UC+dKxHyF2GtifX3pbzoyz/fWHPA3+9plXd\nfwGGHUnlMZK2Pvf1WXyOOYCogHEqrAOSMe4Qrfvsh4SvXona9Z9AOwo4WUUK\nE+8GCEcVW7F+DIIZbZnBeex6PzDrV9uSLk1xNRysl2sspB9ymuN7xG7oIB6R\nbLPw0QXZ6cz1avlKkJpUQ1FhteH227fuY1GoSWVkAxB5lHiCROdPXcYzt+G1\nYflMh/3nNUBBWZKmFUkHqSEHecwuc73EVCDEIt2xof4H0rYooUeSvCugS8Em\ncxNUucPgSSteZDEp6QprFH9XyhH9F8YG0uGgUqvRfFjkqrqm7ClrOUNL0gAj\nUL10Ciamtg0kAQ/ZTHQyL5TYGU7kz40sjIROa7x8LBD+DuGZEGisWtHd1+cD\nsCUx\r\n=4TvT\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"68b718e3897e01f97d0850ed399b444990e3ef4a","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.22.2+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.22.2","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.55","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.55","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.55_1625180952355_0.9916449172371165","host":"s3://npm-registry-packages"}},"11.0.0-alpha.56":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.56","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.56","maintainers":[{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"cympak","email":"alexp.webwork@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"0d1098c821574aadab85beb47a2c40983ff5119a","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.56.tgz","fileCount":162,"integrity":"sha512-yKLM9A6HAP7NqNum/8vCePWudPA6h2doUGIrnMK9gx0T9McmuGcpBVGIcPHrlR2yMzdmcWNuX6EA0vW74TcKVQ==","signatures":[{"sig":"MEUCIHC75Oe/6OrVPRk8vPrVEfLClo58Vc89F5TkgYMUqnngAiEAlIpeNkmIm8B7j5EXsMlIrL9nwZmFIdYckcWiJY/CV2Q=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":430753,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3kxkCRA9TVsSAnZWagAA1eEQAKCtoE0YH5B5eoAvO3yy\ntYm5dVyFvXsdd1TkptFrP5kQbrlUZUfjuos19jmcDnHJ63QUuzIY9kV+O+T1\nJZeM27Z3tRHdYJAvRuMx/wTa5dLnKXcjtDNh+IabII/foTIPkAuotw6xTDQJ\n2ldec7rvDXij88rFWPOOM8Kb0BL9DICwOodgx3ZmRDtQokhusj5G4ULXsNow\n9NkcC5PzSyFCZETEp6AHo8BhoUFWm8KM8Or8z+eyUdx+qjzOZ7Mr+7yKSfct\ntBPG4/cH+h1meglHMxVepYyw6KzBQg/UX2tKup3nRb4JmkTa2XCCW9/J5hUp\nH0GugJDxdCoLIQCNLLTIOH5nl8YOyWywWjb9HOguTmF8LfPMVBQ2kTk96sCe\nBBgdTSpC3BpWv2eqiJvMeMyoSBOHEvcj32JHT45Za13FjwoG0eLT1Em/9oPj\nOL1FcsCpe9kalqaoIQgYzDOaXF4XKrhV/yKiqJ4agJ56fmjcH93S2ECeSMvR\n2R4uYPsVQ7QMPX+6/7Et3XfV16y/7zHjA/tMaWX2uwd8s0OOmizCsF7Mvutu\n8yvfF8zfT7AEOtL6fYQeEkYLtHloBsCSZtkTE0RTHWiGTrC+mcHAxxX29wPf\nXlZ52th04PNNfJNac5+H9Xn/pQDfsprYh7IfsPP9g7AW8WsRfkFMplUhOfDz\n2TsL\r\n=PDTt\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"126c95adbb79935ccbdd15516e7105b122517241","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.22.2+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.22.2","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.56","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.56","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.56_1625181283777_0.5061332270620831","host":"s3://npm-registry-packages"}},"11.0.0-alpha.57":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.57","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.57","maintainers":[{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"cympak","email":"alexp.webwork@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"12c2055ee560e27309a4403222db5655ad679bfc","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.57.tgz","fileCount":162,"integrity":"sha512-hqz5R7ciUyDx01OTTVgjfcmnUeHkHEpfeS/fsK0TvZdlJbPC/tT0DBySyeh4CMeJ/q/la/d7qG0EIeR6w3euLA==","signatures":[{"sig":"MEUCIQCZWzSdsmA6NQ8loEEdQtfBPdqOFTU0iq2Y5L8jHIgWHwIgc2Vg6BUUCFIBao4y0oKCeeHF4sts2QTsXzkuuuFfMgQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":430943,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3k2fCRA9TVsSAnZWagAAMh4P/0ylacwgtdfEv4taedZI\nd7yg5o/e/oemJwXpn22Q7t92D9VvWK0uabeB0W2Lcux8a9qmcDwjKpYFDEGI\ngFGaKJKYXUZnZwyPxREKvsQ/1XbHUk5DL0IAuS/yrr+ALbaQ5xfrVWKpX09f\nJtOn+ipjWG9G+LflOH8dg2L0MnCtrl+y92ykAA2tavFRFt0gQieSwksxbMX0\nIbduAH3LCfOHfGCXVKBiDdpGzU8GQyxYKshBd/DcnQt5S8CrbzXlRmUgydVy\nrNwKPutOgPPqa8xvJ5SdTrucDNZcFa2Q/5zPgqqlYZm57CcFufTqpx6aLiB5\nrBdOkDXMz7dX1NBPrzmG3kk9x3m9pab3Wa8cwjc3ujug8bVt40KDdoi/jWmq\nR2uXQDhBWPUEHzSW9oAHmYIviIwaF0/0kNr+Y86CwTGdB9OlV5jo4XowC0L+\n4Dpt9ehdUqmEFvSuOl1HqoiF97DueffuNLAGAXXC5SZikGKhyuQxibrhBDn3\nQCJoW2OY4ioOPOtosYfZCsyzy5J+q8Yib9nU/djpXR1JOzUzGNGkSPICozGr\nVl+/3qpCtqMDrrtshEduHuf+f/VfQV/P272hpB0zTdTOXTz4nCJx4PlBCQx8\nEQFmL21U93zwTrHjaV7onR+2GAibEsNAP1S1kftKJh4nzlBjm1ePXJ54R91P\nnclC\r\n=lkFb\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"87ac0a6e9416c46fd3d41e625a8724a133911ca4","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.22.2+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.22.2","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.57","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.57","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.57_1625181599078_0.7602050224107944","host":"s3://npm-registry-packages"}},"11.0.0-alpha.58":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.58","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.58","maintainers":[{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"cympak","email":"alexp.webwork@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"8f851457105fca5066838904330be967276db3cb","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.58.tgz","fileCount":162,"integrity":"sha512-ClDZQJFQA9IUsr1DsIWkG93cukFA++FpNU4qb7HK9aIpUxDesO0R8AbG4zE/QKz0/l6F7+L5eaDQbGZfEjOz9w==","signatures":[{"sig":"MEQCICR8tlgHEWtRwuakmIR2ufOvq1wUNRoRjP1En5QzHsdhAiBLXMfeHN+Wr52fWdM24ixeYaip9A5RIOYWeXKhRz15nw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":431133,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3k7UCRA9TVsSAnZWagAAYlgP/ROppMiuiEkmLdc72+hl\nndY7gzMvlb5I/xJv7/79gxU9sEUpTJ0GxoCADrWVObnihh+pPdweI6n+2ZjA\nDdtT/FPzl0xbkfpXEzq1tvkUO6Vb8qp6Jf3GpkFLlOekUmI5nyPgeaP0VyYY\nTiKY39eArUl/GBo5DqdNIzr81ljuFU1c6USpZ5dIQxv5miIn3IslR19g6+3J\n33yiZGQumAC9Hhzp0mKxWddDVaZYcSkIiTPagJaLfzmyJfmFi2zz9sborsnb\nX2JKPZGXToxVYW/SBJb5KXea36ranKktugGCTWWLXHnaQxVoQqqrXUaxk09Q\nqBgj+3nY8zRbwoq7PRXNNChDw5ofFW7akTgMUEX4isKH0xIqmOjP+C2wKa/q\ndvNRXTJW82pS1yISaPE0G7xzrWqKWldBuFngaS39K6Fb1PvgF6hJ03r0xPpd\nnvHxPNFdJYndmE6cVmgFv6IzaYWCAPuVaSza38+W8XR814dYgkxOhKflDpqB\nN8NWBWmZV3geuOyK7vovWx4KH/wLjA4vd7YVk0rWZQwqs32//mt5//O5lWZp\nWqv9v/b2jTuIFHzuw/jlQKv796SHgDa7yZ8shxeox3QkFbioN88SCNucv3XE\ngmosW1bDCFYcmEXMzLCQIK4wiatWI/mHwZR2kIcZBv5/RJtqynXzfGb0fbcN\nb46Y\r\n=7H/v\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"eba773b1e49507e47ebc3c4670497f5a12dbd538","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.22.2+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.22.2","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.58","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.58","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.58_1625181907512_0.13914322739666085","host":"s3://npm-registry-packages"}},"11.0.0-alpha.59":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.59","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.59","maintainers":[{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"cympak","email":"alexp.webwork@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"06539f62ad4f5cadd7587c1c3cc848c563d86171","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.59.tgz","fileCount":162,"integrity":"sha512-SnIUYGGCMf1RkRRunHGQtjirdz9TfE6sG7KUXV7IEZCdq1mWhaMGKPnnx0vOqj+Cuk30ydN/V3gCHPgfpnPIBg==","signatures":[{"sig":"MEUCIHsq8SNJ+Lwu7HGTOetnO1aWoVyk7gh2T6/y8/SkJ12MAiEAmmXuyf04CHoR5vJZcfaVsBKWvengBMhx50QFEWr8aA4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":431323,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3lAhCRA9TVsSAnZWagAAu5YP/jGbjKMtOyFCFc7zVJQR\nVnKqb/0WFNjG4Gt9X5mGnUl3vhP77BacHd1N3dzIJpETeTg23rfHVZqFaaJi\n+hepyBc6xh1GqUzlDjXJYlV6l105BR5S4L0beT+6O4x5Ltjz2IwmPguA2dWH\nKkFa6zbmr1HWbN0qos1ndO38OQqIhbgONiFN5PgyDKXSaDvcVXHIK0UqNH43\nY18gEzH0zGXxBn4Yc7IiQBncWu4YnRkSzpO42yLrselyaghRQckxJkNQ7GsQ\nbWB4kbNqR4rEWS2SP9zWDPOV9idTxu5ueUTHhqKONVYJrOcJdbvRA3j9+xnk\n77P7CuhHdx+bGYsfk+P1x0FN3qRDy9DJ/TPQsGpQbDe6x49grbz49RYE9AnT\nALY3UXzaz8SpsrU73KC90x6ZhEA4hohN+TTmiSpFLif+/Yoa/RNGyoJEFhbV\nQMhNGvFe1d+bURZinV1C6HN3z+JuSoV7W6poGgz20PKiaTYoVbUmV3uPmLW6\nloOg9n74h2AaYbig0QIcs2QMwo8GyKTIPYrhEAfxSLoHUAnlQda9wCzWw85i\njF3E9FP3cTK5tCwQEVMfpTnOJRYSMNRBYC2M7tzDRQwUcBnQYJVq/HMJO1uv\nbNLoAyU4xAuQcGAN5zCgz7nc3JLjzeTsZY8v2atS0GV7t8/yJHbXHAcmP0xe\nrfUp\r\n=TLCZ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"54ba0f224964bd4096bc6cd4384274dfc52a5272","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.22.2+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.22.2","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.59","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.59","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.59_1625182240935_0.038445003550844126","host":"s3://npm-registry-packages"}},"11.0.0-alpha.60":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.60","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.60","maintainers":[{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"cympak","email":"alexp.webwork@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"9e440d810a95b2f1237a5fb03c291628b9eb0370","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.60.tgz","fileCount":162,"integrity":"sha512-/iDy9Sx1AE25eGvgz4Yb7JJXRX05orv3zy459HAcfV7OOSHeFdI3Quv10n15baaF425brnhbKfpQf4GCO8H9SA==","signatures":[{"sig":"MEUCIBwtjQ804crzvmgaVC1ulaiepll2+c3Vov86T97RVthmAiEA6/EmDqNTP+F7VgR+HUkU7C/nkb/h/Oq7D9h3NBo/yfo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":431513,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg3lFeCRA9TVsSAnZWagAAAVsP/1myzU4fJyhXpc87JY8u\nTbqN9xscXPqNfQ8CQz+z1nBjavKs1reu9Mf5DbLuPSUe/q5SANn2S1Kmgxg9\n3g7X3fpCTT+kTzfgJ2/YsE9ZgEtjTu0/hDyvX/B8t7yv+d1hNsIz21lHQO32\nLfqlGFCcSt48bKx20caNf9m/mbeLnXYko4e1IS31DQI17wr2uKCrUousepHm\nzEDlwj4PyJxzEiXyBg8Hc2f4YahgqvKDE6jXd2WXUl6fpvxTRbaq1K1yGkjA\nCXRfI9D6rW3M1RILEtsTkbxYstMLDs9QmcSW4ZjTTt+zUs4qBTmyavJQo8Rs\nDNsE8lxm4jw8NkbLKmvV6cMyPhL6H4/efsi5yoXW0B4l2tOrQopl8yFWGSa0\nI1pcXeJVGtmJNIteKo6z77N3jpz7fldkUFGYtQ4RtKm3IYv5S3IOsRLGM1vd\noArFHL5xl4GbtS+HQeHTod4fGxAyitZibdrXuGUs7iTCAJQ4sj6HB6fU2081\nwkzhJCPTJONyC35sl5DMPU56XZzC+wtqK1VV35uhgrzMT4En6H0dHiITSwH2\nKcd2kMALBuuul+wQEhY7WvTVv61dCqZeE3QylseMSSwdNkKpctiW3C/FHq1V\nXQs8Ju9DsPIMeVt1KGWPHADFIbNuqQeUGgFF60RAnZzN0Y6OHlPeU3ozxfwj\nzIzy\r\n=blrd\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"6484c90652819ca6399732947e7a85af5bb3a11f","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.22.2+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.22.2","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.60","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.60","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.60_1625182557554_0.6522692425394234","host":"s3://npm-registry-packages"}},"11.0.0-alpha.61":{"name":"@brandingbrand/fsengage","version":"11.0.0-alpha.61","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0-alpha.61","maintainers":[{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"cympak","email":"alexp.webwork@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"b01fd3c145c6fd967fc8729ec4d9082e2ed751fe","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0-alpha.61.tgz","fileCount":162,"integrity":"sha512-c8raCHQc26OZJjp6SySIyh+6+NFruUAhcOEcukeHD96yOVtvR/wddKEtFjClkOAQCjf+/YgoYtMMu3bCqOQ7Ug==","signatures":[{"sig":"MEUCIQCqteip2tBIZxwxXcP/lTOTRRaZ8QBm0nY9n0tcGBtmzAIgYRHmER57KR24dLOKpWJVvDLGzLM3nisaslyhR5ghJFU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":431703,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg5KXdCRA9TVsSAnZWagAAco0P/RXYkHzhguHapILMcj5k\npBvsHrvcRQa++4hGvzGa6F++PxPqxAob0bQT72ysYMqfbbmDCG572H5ReW7u\ncmw2YbEtYlPuSqmzk/n1Oyo+PvajtbJf8TGpq4ry4FNbaU2IU8yEjbRHERf0\npQ0r3TvD6+ymvCIH5fgvaGT1KqLXKyBAy9lAGQar6CyPjPpkKuPJEeiM+k1Z\nyxtkowfvBBXRb83K+zfbSQJPsOhmGUWcp0eDAQe1BmbuAfxKFqLMlsWJ6AyW\nFMw1lGGQ2zap5wp2gsF7KPBWiaicpOwLWT0Txkbpsgp18D4lNFYLwgyzYlWh\nC7erB3ooVqof1T6FsWmeyb1h0SUp09bndl6lnMlGibVpLEOYJTnF9ry+Vl77\niVMHf2MDLssQ0NU6LRrPxGmRcGJhOlvCEACPPhGLHeGWfPVgThPbfvlfZeBY\nQsAc/BV+3p55fu0OhLF54B0PwpuEkRRAPPPXofVpFC4EXxWTQQ+/x4DreFWm\nUwOwmVKfk2Vyr/AraZU547sltkyUKL2i1Kr0dUOfjzHGo6oA0VY5VRQ+GmCL\nwaYGinxYn4dLJWEjO7EgbNHoVmS4VosUdmJok9rOssY4F33BlBUs9RIGb6Tp\n1juWX+sEUa0mtO7j1RmtMh+sr0gFshUkjiiky4OYtGoat2e4smEazuULVuFY\n2Zou\r\n=7mqJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"c703219e0efdfd3842fabdbdb079e866aff54103","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.22.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.22.3","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0-alpha.61","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0-alpha.61","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0-alpha.61_1625597405316_0.8549311858074999","host":"s3://npm-registry-packages"}},"11.0.1-alpha.0":{"name":"@brandingbrand/fsengage","version":"11.0.1-alpha.0","license":"MIT","_id":"@brandingbrand/fsengage@11.0.1-alpha.0","maintainers":[{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"cympak","email":"alexp.webwork@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"296b40e7a00b9ca93e81c60cde98ad65e18d9753","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.1-alpha.0.tgz","fileCount":162,"integrity":"sha512-8Fxgk5G3Z1Akrcz3hTp2EzGKWmwV9r3epnG+kO9UYDoWPD7yVbgeaCI70Q4q05SS/7DsEXkU+Wn8qJdEpyWUfw==","signatures":[{"sig":"MEUCIQC0yV7zlC/6oqmlvXFGkNTknBTYxWLDp4hjJa2vzvNxEAIgdiMeuTCj0BdU/cvy55z/g/lAI4OvQSdrkMl+o0c88Zc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":431889,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg5Kq4CRA9TVsSAnZWagAAu2AP/1p9J2j4z5ZP4kplwzlH\nYoMnWAq/Yna7kO12UcJY2HScFn8YjDayYHlNhADg1jsyiG/KEnykSuU1prh/\n0W5tQPchP+nYU1+OVjeIgSfACQQhcE/rg2s++b0TBpWKBZWl1Q9AgfsaSopt\nRDuL+Rjbmzr/9GY/D2LuFWZ8MYKnPrJ2ISsWFpw/3MFrbhWFoYD3U3uA4olO\nndb6+MwxCfSgBuLNN7lfKKAzZz19Oe57ADYe4i3qsAWsXWuo6y8C/ydDtkDS\nF0J2EjfuxubEMGTDCmvJL9Z69ft6Ki8ltWCPFrxUzzpEckgNQmYfOYTdJhVm\n06H/MaywUDOovB0MMZk6oV2OkXu2KgTBs8Nnb9SqbEU/QGPtVabbeEJf6iAp\nf23aqCp1mGO+scX5IeeOQp3GkFdVl5kn22JvxSV8KmKsuUBTiExIuigrnOHZ\n7FVL52J/ui5hkCrxQRzRYchhobwfaK/V6Ytu/ECRs26dU7IWrifnWqUq2JTG\nvqFcDLtY5UB/i0GsN9+mCm2+nJHYCsMkCYpePiNLSqNoofxyKSALqCogN6ze\nnxZ3UAgfmNSLzQoJjrPfHtrgwVzCDrrZ/kZ9+HrrY+tssnn2FN+dGjF1paOq\nbAC7vS32R4sIu9TPMdXY9PPgFPQZq31JALMKk7acufi/tDInLP8dz0ZBVxg+\nlOdu\r\n=HfNz\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"764a5f6e443d733137c26c764240d6ca250b3b9e","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.1-alpha.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.1-alpha.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.1-alpha.0_1625598648329_0.4616581633204384","host":"s3://npm-registry-packages"}},"11.0.1-alpha.1":{"name":"@brandingbrand/fsengage","version":"11.0.1-alpha.1","license":"MIT","_id":"@brandingbrand/fsengage@11.0.1-alpha.1","maintainers":[{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"cympak","email":"alexp.webwork@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"4a6162b47effb08a955ec14122f24311aa1d3b64","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.1-alpha.1.tgz","fileCount":162,"integrity":"sha512-c37SSYK/RwQLSzUpzUu7VDtScBJO3H8MzJTuQIo7MXzIzwhkHQI/t8rMPUk0H48F2yCGlCn7Jq99zf1wPxvDyg==","signatures":[{"sig":"MEUCIQDxG8WBUTh0eO6v6hVfk1mctOepX+bDp8BI10xyrVt2nQIgVdCqRVYjaqq3gN7REFx6xSEGxb7j4zcSxq62LBJq7DQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":432077,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg5fxjCRA9TVsSAnZWagAAJ1YP/2nimpJ8DpFKlZ0Mr0RV\nFZyY61FZi6chLCyojO2huTnHQwSFxonNOuxuvssqVwccae9TCSKGKpAJPYN3\nfhjr/v/ojksfzJv4gVoYue0V0hsMQ8IHxVpZtYi0hrtkL5w5tqOwhEEAMVjN\nO1qq64xnhydDhCD13yHYhAUo+C/NVDgT7qfW6w43D+zQMPjPEs1kjOtYXwcL\n/5jNYI5GEDjUQqJojbVmP4ggTXdTbVHIx9v2A7OfzgIjyYoEwPVN6CCSkwnI\ny7Ulx9SQqWEHKwybpGJAYhhvDQLUUngE7aVuE/VTC+jYCuxkFfO+oeSJ/ABu\nw6MVg91JVmAFFWNpCnPdwB/8WMwNgGCod/V3uaVWJ/LmLdJqOAm1L5meHg7J\nU0ADPYUQfErrVYRUqs+H3N2fodQ43hfZUH40iJx+CIkj5m0rMND9L4roDdZ+\nuIH5222uVb4urRDCWliM+q8qWZ5PaZiIMLlZ0AIDtmBOwYKUWhbAazvIeTy0\n+tpXfu5SCbdaOEvpZtxQoF//Uhs1sT5hHoezAXyxJs+FsPHiHR3s5TnVOKk1\n+y61qGSP/r787Gh2owomMNTvtk+lfWDBYCvALMp23g1PGMWgQTjl/duelKQz\nuU35XwyOM2ijeZ32G9M0E8ABBz6ZCEJ4dAFK8pLapVgXR5bWxahhyw3+vjaN\nGR4C\r\n=n8gF\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"1b07a46ff055b2b3e06744522bca1682ae3987df","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.22.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.22.3","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.1-alpha.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.1-alpha.1","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.1-alpha.1_1625685091188_0.06265136273375216","host":"s3://npm-registry-packages"}},"11.0.1-alpha.2":{"name":"@brandingbrand/fsengage","version":"11.0.1-alpha.2","license":"MIT","_id":"@brandingbrand/fsengage@11.0.1-alpha.2","maintainers":[{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"cympak","email":"alexp.webwork@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"cawhite","email":"corey.white.a@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"36946bfe24593914bdb83d1964b170bbdf5a4721","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.1-alpha.2.tgz","fileCount":162,"integrity":"sha512-wOpTRX+VEWfh9OSjtH5Te9hBKXGoM45lwUdUDVqTCR1sZ/cGUF05h0ffT4pSMQ7tII/zNrm863OEIgo03frd9A==","signatures":[{"sig":"MEUCIEElWVqdNsLDtHBKtVhfVbqtxJnw94C5gKOGaQKKzm/WAiEAiMdvdh2ZlYogHVy2B47VMmtq/Y4e0r8XNi84OHFnJj4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":432265,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg5gwfCRA9TVsSAnZWagAAAFEP/R3tBz4VpKVKDicxAqz4\nz3g3WOkaZbpYvuZH6xMfsGHlBqjoKJn4tVdfRUSNnGaqNx6JWYVKlwKIHBIy\nzc2/wCnJUjdJLpv9Q65l9k4mo+jIk6SKHqxfCiGvOMzJnzlAEnIIZWrQAE9a\nyYyY3JLqD7RvbIrYB1mK7f7dCde3JZ6JDNg6fXZ5V9sgh8ru2wwrInpFKzwh\nfNEJgKoXy8jIoh09AgIAjNkbN8uEFWFAS3NvLRzWyOg4pVep2Qtaa1i1xpmz\nstq8jdSmQIlzeP5iYhmPtPvTJ6dKHNxDos4dmyNR1fiU4RXYfl0o/0fKozVk\nCil/Ml5uJjbnGjmZW4RsmY0SD11cM+OF/RntEHzfbMfrYzZvARMz0xc7ALZT\nM0j1OMBdT3ZtuSg5VWk1OMZ1nH6GGSv+06x4QtmGUAYByTThmf0aR18GY5fP\n6x9bQq9zXVlKS5XoosQGeW60yYsyQDH8lT+JrtxisntAgXIciAQKktRX0yEJ\nYchY1qGY4BtGp063B+3Vs8Lo7qHfuw8KC9faGpy1wI4LdkPV4bnoauQaq7jg\nSUtJc1bJ+lErf8xzeRYeIQ3F09CMVz2itHzcaVwAbg2apQFsOly4k3rIc/AP\nbPKs12QYQYlOIGm8werTyFRL6msZL93m2LyHnwWdBQixHm/nLVIgsq38wThf\nT1Ny\r\n=m0hJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"9401aa79f4d6511cf7873b6447df3d33fc6077bc","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.22.3+x64 (linux)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.22.3","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.1-alpha.2","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.1-alpha.2","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.1-alpha.2_1625689118903_0.8983452787205501","host":"s3://npm-registry-packages"}},"11.0.1-alpha.3":{"name":"@brandingbrand/fsengage","version":"11.0.1-alpha.3","license":"MIT","_id":"@brandingbrand/fsengage@11.0.1-alpha.3","maintainers":[{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"cympak","email":"alexp.webwork@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"ed076494d78d70658314824f0b068d3038f536a1","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.1-alpha.3.tgz","fileCount":162,"integrity":"sha512-tB/Wq0XjCMMWFqLETlYj2OK3qHgc3kkvugDngVU6/94kE3fDvkm4XR5E9OVqRFBmJ1TLQDToyXAsMhweXnUeeQ==","signatures":[{"sig":"MEQCID7DxSRJy0axaSSCPCLzI0K2i8fRuJ0jy6Ydncmnj3MYAiBJ3D9Xr9jcz9jijrLDBTgJDTdMyvHIhTNOJcUJ8DcQJw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":432453,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg6F0fCRA9TVsSAnZWagAAgoEP/31XBs9lYTp8HNx4DR8q\njJAmsS7QeRcli2SCyx6+5iZzM9QxOqeBAYaY2PJZUU7qhNqP5brS4bMTav3S\n+LUVTd9CCGhsjJgNL1WYUDO3fYoSDz875S9AqbvFZQKXzix7kuiTCE0bLwVR\nzw36ydUSg4Brf/z0iov84LmsCioq/uR9ktORM5KzdZoIGAqWF+YYkd2R/wry\nqxp5OhyN67rLOzs07EWdMy6ybx+3+yvi9XzjEnpUcVr6lA+iyQQaxRdLF8lw\n51qgVVHtvta22UFFL1gclzqar+Di7KA8AyP0oLu1L6k5T+0bnaXE/Aau6xM5\nWVpqbqrfBoVJBYeZ7jLbS9Npvyaf7jVrP/TIggJCAPYclTN/+k+WJ6jLG0xp\nyR0pFjh4ijMdFTd28R+LTu/GFC+ELMhH/CrOB/Jt+pBIolJA1j9L2DpjWt30\n+ohVtv4sVEGGM26Yo39F+Oo1W2JxwKBe/Av8OpE/6Ks0NW9UCfqIUc/p/Mu6\nJcT8v9dfVVu7BG+IACNR158cfb7KfIR1896Wf9/H2bs+EeRNnDSHq5u0HG29\nY1WnnpUg9k0Mn6UOZvsBLN/hNdjZJNGXXD9lQ51Yg7LS5Dvrd4K+0FWQGe7a\nQfqhCDZ8kaVJlYycpNqO1WCrS40rIDNh6wcLaXMga15ytAhA2G4y9w0v+4h6\nUDhU\r\n=1YGM\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"33514ad534ca23bf1888a7e3a9e1c4afdc8b4849","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.1-alpha.3","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.1-alpha.3","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.1-alpha.3_1625840926580_0.926167803331641","host":"s3://npm-registry-packages"}},"11.0.1-alpha.4":{"name":"@brandingbrand/fsengage","version":"11.0.1-alpha.4","license":"MIT","_id":"@brandingbrand/fsengage@11.0.1-alpha.4","maintainers":[{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"cympak","email":"alexp.webwork@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"1d8e80719b884d4c87c89b5b2a402826c83c3ee7","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.1-alpha.4.tgz","fileCount":162,"integrity":"sha512-O3DnE4yRtcdLDTqtvehbpe6Z+pY22wtzi5t2fy983N0qo1Lr/5fDdFqQhZJttWyBUs8+RN6mHv2jJ3cdFVy97w==","signatures":[{"sig":"MEUCIQCHN5G8gzjRqPLI9ShT0vrm8vuMi5cKylMtALkoNWP3WAIgMEHCZrjjcpBssGUUDslSBAQ2W5ne3osEj1zhTR4hugw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":432641,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg6K3KCRA9TVsSAnZWagAAZd4QAJKoSvsWfXc7hbDqYd+u\na8itHE08aPqcTLj+Dr81apLte1TIycHktOjCjyVCRRfWc8eoYqrnNKyZJaWE\nNpshy52V785i3jI56yI+g7p/VWHhHuOZtdXou3iBCsCuqjhbfr32z88ShKkG\nyYeoyuQmE43SV5yM/UpSJBWoiHJXjKtRS4ug2+STS8S2yxYooJxTVTcjbw95\nZy6LpQX2buYb/xaOf+e2M+sPXytriJzbhbPDWzn+vCfYPU7bGbH2Tc/sS6Na\npkUN8xtiqsBZMhjy2Bk3BtQpGFQQbTfII/nsu13J7D0IeckV5N3/+QDCSG/I\nN9bKbG/R1HePj1ILab62V4xxdWVnbYiLBmOezQ+ZJ875xI5YdEz8kKqZKKKb\nGXKbiy32AyvqFidh4obne1XL8EhYix0otyajwQD2lTfdkeBChIy+kFnteztp\nqhLxrqVL9NaxsCrk3B7/vMmYUY2zhhmXgMUeQ6H0jJo2XMcHZxXfroqdWQnK\nRHGsb6pCukBRR9lEgP7PdA2m2DRYxkCrMUyR1fDr/XL0Zf0qKPSSsVVKf9we\nEByMeIVpZximxIpoJ9EHTWdDlZFgxFq3SdVv+GpQVpm5wfAbpxRkGFdh9KoP\nZc0Os6jtnK2MbCVUiJzI61VDwkhia4cjNaESsupqV8zSaa6LsRyfauXFVCv4\nfTo/\r\n=CwcV\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"0e1da2937ce64c6e48d268a027c87c0d8338cd9a","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.1-alpha.4","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.1-alpha.4","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.1-alpha.4_1625861578243_0.8356792785486802","host":"s3://npm-registry-packages"}},"11.0.1-alpha.5":{"name":"@brandingbrand/fsengage","version":"11.0.1-alpha.5","license":"MIT","_id":"@brandingbrand/fsengage@11.0.1-alpha.5","maintainers":[{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"139fdd0d3850c9e3b7fb9d368df1ff9098b9e07e","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.1-alpha.5.tgz","fileCount":162,"integrity":"sha512-sStitvQ/d/ITDcasgIy75nyDtg4Nrguc6bk8ZPyOGO90c6i/ei5kMRP4au6O0B8k47/KFKaILeuyK3QfVsZLcw==","signatures":[{"sig":"MEYCIQCLyM1hMD+xF3n8Mc4qqHh4YP4iOQE4yegY1ahRPsZdJwIhAM2XHdUVXauolhds6Y4/M05gKk5XBfgbGg0Ox6x3gVAd","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":432829,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg7GEwCRA9TVsSAnZWagAAXkAP+gIae+NZwnYdBD3iTtu/\nnogGZTzmJcidA5eL4mKBvtLWAV+bXrOLmYEDKAeX0AEFeClG9ilQE4ZlXcD0\n0byl5iOtr1Lgfz9soweEiE9q0jxWhnjUjMROJwO3Z/x2gangiVg41M7ssc5s\nh4VWJqe5Tw8dBojbyx4RZVw/FsFBulJMkHaX/IYr4RFHaEj4hHbwvuaJvBbL\nR0ucELGyQ4Bvq+ujZuNpdBLJAnzBjKBTAwh7pOPJ1Npm8o6f/7C+9FrjwHUS\nB4yfFFw0ayOiONODD0LAG2kwKd0D1Vtn2zurhrfIWu1t8oFrKxsBtG90G7di\nqI3RGU4jgLFYbLCWdsDoD8+foMt5tivdM3N12Y4+42VlStl8xPq4CQHHsLM0\ntCafhcfr237JvM3vGDft2zHd4KXZa41ZuVrdFFJa/dC/bXW+Wsoy9jjsJOyM\nzFsI9M7YRFjuZuhnuPwfLB83KoROmbXXdcMsy67Qu/ZI7BIsi4Lw9QPLP/GM\nzU5zM9uzlaWTvpRmH+s3GOCbps+3Nlr/qQURe8RK9XfAJ923QDexlmANtd8H\nl1ZBVlJqjEykRszlgCRTHaGDW/3p7QnQjqkypZQWDhE7iaZsj7UG+QZLFqdg\n61f0UCKp9oitxO2yIN+Q80uN7vuPaIAGxLYxm3ed9/HTyfhtgkixJ76XoBWu\nNjqj\r\n=roYa\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"d85705f413aa6ea23eb48be44e5d82a1e10cab7d","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.1-alpha.5","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.1-alpha.5","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.1-alpha.5_1626104111616_0.39803160537903604","host":"s3://npm-registry-packages"}},"11.0.1-alpha.6":{"name":"@brandingbrand/fsengage","version":"11.0.1-alpha.6","license":"MIT","_id":"@brandingbrand/fsengage@11.0.1-alpha.6","maintainers":[{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"}],"dist":{"shasum":"0c3e3b46b0ca059e02b6767d8a47faa0ffcac72c","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.1-alpha.6.tgz","fileCount":162,"integrity":"sha512-A/bm5URD5wY8GjcT3emzkzZtILPN6xBVuXF1WjRV6KjA/prUBXNm8ROH3D083rzvqNe2BpKIenHjqhk1Olhs3w==","signatures":[{"sig":"MEUCIBG3xw6lwYwnm3TSZ53EasrhM0gCQsjO/upj60dUwh8WAiEArDJNTFa0F8rXfEFFBEMp9UN/kEFTBHPdIeCpt4MHxsM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":433017,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg7fkqCRA9TVsSAnZWagAA05YP/0nKmnDWplyb2MIxxX/A\nLyXCFyXEkdRray++Y/hDdCV8jfaedBeKudho048pbF7eZrp7SOyZQKwSWWgU\nouYID7gZXgUl6rRRosZGcUkp6TfyMUnmSRUCITIi9mr0zzd/p3q9g/W4AV4t\nDQjrrPP5WdviErgJq54X1UGLs13wTfxJS979nwefwJpl5O0nfDdrRoaUos09\nwwgxUvX+6BfsVSVkpu4q762QBrfgz03jWKzI32lcEDGOQOborxVChf8B87kM\naYdn+03VozSOkW/5ulkiDak2cXYTIV2otqEXwYN+jpNHAlm1AqWB754BK4ns\nSELsvUSaEOrO/KO9xGo1tPJSLPkIMxWQ7i2zMF7q4CIVh3F9Yr7TPAxZlRji\nF5/cvP+nsOUpOQYdR6YhYjQ1ZtwvUSjEg8gKLWaFEd8tXalzGvYVf+3CW259\nBPeOrl7i8+pACP35/56AXxejJ1mTLBrUP1nw6J5IDwuLrrFO2ogY7Rxx2ZaX\nnsF/vp3cg4HUZG5KOY9tU8j6coMnjKTk7QIiaPzH2qofKbD6IvFPRi6rK+PZ\nw7p3RbtyqNoVRLY6m6wDZt0VNeLwfTlxaqO2ZF0m+k8oWtUj8gPbu2A8KFu1\ndeljcpT1ZxxM3lq0T7J192XdW4yfYhtZHCPHIxHImcdTviQ5/QwghiFDmUVl\nIOwp\r\n=ijts\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"7d28f937e0362be422596110d1c112323506f81b","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.1-alpha.6","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.1-alpha.6","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.1-alpha.6_1626208553638_0.07196220326190783","host":"s3://npm-registry-packages"}},"11.0.1-alpha.7":{"name":"@brandingbrand/fsengage","version":"11.0.1-alpha.7","license":"MIT","_id":"@brandingbrand/fsengage@11.0.1-alpha.7","maintainers":[{"name":"elad.karni","email":"elad.karni@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"}],"dist":{"shasum":"c0c7becc39d456a3679bdf93a59c76d12cd24275","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.1-alpha.7.tgz","fileCount":162,"integrity":"sha512-loaKGsOlaXsfa8//sLemnVPPmjDnpI0qP7vTKUnQ4hpj9wxNvswY09biZi04osPecqIxLnmxLtu6ztLL6PhvEA==","signatures":[{"sig":"MEYCIQCuIEE+7QMcYu1quMcPaRsGkW+IL+DMkvslqKUEVFxIFQIhAKuoT24QW2Cxm8R9Dy1rcsadqP5tNB+mNNgKb/X9I84D","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":433205,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg9x3MCRA9TVsSAnZWagAAb/AP/Rxcx22fzD9OoNT6kxBa\n2m3C83vlRyqvCTjnbCxhqKHk2hTrWmpU5cFTcfASIeOh2m1C365QNVDt5kmz\nuwyufkAm6ORq0WDUBLWM/vykYPnLDQ0+HlJ2jIAn9Ufnk/Mo3WDjXT7H/qpV\nFDUhJN+1mPjdDhObvWDIS5O5cXSMe9NtC5mfRuqYaiLO4jCrLk1vaWZVIEam\ntZkrZZ+7JkDZ4ZIsHZsa+jxhO0G6nslqRifNT7YGihEAW23/7MskGJGWw6Vq\nzvvfI9zU1Ud/rxK/aaSh8fkmbNPSRxvC3okL8ev/LWqdYeQr/9pWSts4bJw4\n5IckfaSshswPbsxD8ynPN3o0AWqC28nsG9h/9PoUP5oazJ6k5a6klj+/uuNn\nHxxJi5NCjxH92CvH55AZO4dEPcQ1aMpzYgi4dM98zsZrlL14UHtncdehlkAr\nftFQ9ywcON2udIvknsEtpxQ/3kG3O3DC9hxerLszOQAfKGWA/BAtUYiXmMTO\nE8L0uHPKPmjUtQ2Dmx4eDAK2LCD9I2cgCb5Nt01j39jpWewALd1tvdZ3KKFX\ntqIWyFoYgba918nLtmTND5HhdUJml2XD3JOhS8crUhnKPYWfliKzTCFobQ9E\nS5CHL8+9hMyJecUFkI8s5mBaRv/AJm6sjP/ETgKIYX/KtCyaN1uha05Hn6a6\nZUzI\r\n=Ws1Y\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"19fac7524fd2d40b35e13f3922785632706358ef","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.1-alpha.7","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.1-alpha.7","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.1-alpha.7_1626807756678_0.6631195573648518","host":"s3://npm-registry-packages"}},"11.0.1-alpha.8":{"name":"@brandingbrand/fsengage","version":"11.0.1-alpha.8","license":"MIT","_id":"@brandingbrand/fsengage@11.0.1-alpha.8","maintainers":[{"name":"elad.karni","email":"elad.karni@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"}],"dist":{"shasum":"56e5eab49c34c3b575f85e7701ab3c2c77610dcd","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.1-alpha.8.tgz","fileCount":162,"integrity":"sha512-1TdCzfEkiosQD86t0Bp93OcBLTZC2QFWoY0cb+v9+Un7nk84b5z6kqyBOy1MZQ69g1DLtdw6uJiuC3Jcwrb5UQ==","signatures":[{"sig":"MEYCIQCqKpepYMEKopwB7ptheo6Wpz+qjm+KVugozdtQLYdDXgIhANT3LDXUaKdQj238xSJQWr/9M3FU086xMW2u+Ku/vLOW","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":433393,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg+GctCRA9TVsSAnZWagAAChQQAJoGlwnxjpaf/nk6lPGt\nDB3UfR9ceozqc6BkT1c/b4Bd7BZ+uwdMFJj1KpDJcw+GXurzCD2aqHysxRtI\n2gB+sou2s+dOPwE2EXPAPQZeQV741T4BawFm8lpmlAuwvKU+MXlIgtHp54MA\nL1+R00/VbCMPvmKiUtVr5DYFrkAyIOfK2O90ABbC4NTxsvLwpMetx/mnxyYL\nSZq9flDyT6bZpUyFCb4+RqruwKLGGL1HR5l1dKujeIVMPhVJauol0llU1cg1\nhZ658SzeAK9FeUNAmbCsG2rXMpKyMKgcwDy73wk0uoe1GGwr3LrDxME5cUFw\n+ikbkbhCjG3B9pyMZ+JUN9A99P5ZGJn7I3dBZC6CjKupGjlcRwNk0f5HBvvd\nkbc+RNdjmp1nRsYc4ZcDA2cOpGuA+4C/1IZNKa3FgcAUguPchZBn+ueViXED\nZBm77yKWsLaXsP4JjpJ8Gsgz0NEaaGBkahLq8/aPEMYJNC9bIpRW1bckDfNb\nCXnQF/687zsKvSB/H7Di+26HpE7xh69vBePgKrfYNgRW16OJp/JJ/camjDFm\nr5vNBeTT0JXf9QJp9fl23DOWpfnggRX/RrKQP+1KUfNYAnizN4TmYMGceCYQ\nabLzMsFtkKXZIiNR8rhUFUpl0rSr2xuz5IC04fthzQnxPcSfsOB6Uj/fwV4V\nQddB\r\n=6B2N\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"430374a61059c75491447ad899c146546c83f94f","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.1-alpha.8","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.1-alpha.8","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.1-alpha.8_1626892077587_0.3869376456699192","host":"s3://npm-registry-packages"}},"11.0.1-alpha.9":{"name":"@brandingbrand/fsengage","version":"11.0.1-alpha.9","license":"MIT","_id":"@brandingbrand/fsengage@11.0.1-alpha.9","maintainers":[{"name":"elad.karni","email":"elad.karni@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"}],"dist":{"shasum":"2c2ab1cce3073680f1e8dcf87e55c6fc17239f68","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.1-alpha.9.tgz","fileCount":162,"integrity":"sha512-u0YKnn+B6h7HPcj/dY2OXsShyTczApSnx6+u0rShb60wCi75rrKPlLbDG18ww/UbWp9rcXRGaiYySdeVk3tOxw==","signatures":[{"sig":"MEYCIQDA0YBsCau5L//MGu8rvQGHS8qlPxPYFy9uqmBBxT2v8wIhAKKTEmmKwsy/aooShLvsZPvKQR3JUD5aXIwHY3AtbBsa","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":433581,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhACY1CRA9TVsSAnZWagAAMmMP/jDbBGW2n2EWHdbLC5gY\nJlObOBOZxp3rMlaG5ApmkBrWaYd85M7HajYEAgn7dIB9GMu9yIBLOI8qY4Vh\nw+ysSYXZzAlyvJELmzoV+5GdEV47qu+H7z0GpfNzDX94rZq1+Pmtg8LIprpf\nY7gFlGyAzlgMDqSWKtTPkCNvE++ChWXTMNR24nFb4LNW2RvJ296Tk5gPTkfD\nOeHTt04JnKvQQ17tD9odRfB+6BW+g5ku/0eplqFth+90buB5JXJ3g5NdX17u\nfBd4KaPx5mIcZFPwU6bAzi+MOyJ6KYLtbJCvseedgOLh+ot7IVfIFvAmdBFm\nnNwhLEBvmQYnwbpQFeaWc/2xStiDKfkww+LI0Ryn0LqvYmwqV8vnw0M2NXE6\nEIDUC56hjVNdmXEl1EJkXwMQf5YFAIkiA8X/DdkX0AZ/AU2c72ptse11YPiH\nSK57eJCqEeXOPtHbh4r76GMBKkdfQPWyMl6daDKE09aLGbHz8M14iqf74W92\nezX1ZxdAbv8OGLu54vRtIFchGvvEgjlI/7XG8HiKQKPwBKi0WEV0/MBRZ9pa\noz/MCI3zpQm2KxAs70PJjop13Ty9bnfz1ds1A1bsyyWdTK6/KMDgfPgIln8O\nnc0CnOBmR1tNUXz6oyxv3HewZXhoNJ0HoKiyE7XZtdFsaYwCw5dkMcwsHoB1\nWETQ\r\n=kuN2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"1379dd9d9a2f26ba2b926e130ce31946c7adea5d","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.1-alpha.9","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.1-alpha.9","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.1-alpha.9_1627399733682_0.10064421114838384","host":"s3://npm-registry-packages"}},"10.14.0":{"name":"@brandingbrand/fsengage","version":"10.14.0","license":"MIT","_id":"@brandingbrand/fsengage@10.14.0","maintainers":[{"name":"elad.karni","email":"elad.karni@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"}],"dist":{"shasum":"c8f616f8fd337dbad61f8d70dd14c62e238ce7f6","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.14.0.tgz","fileCount":162,"integrity":"sha512-k9PRbgoGvJ0nc5D7ZzAGh/9eCUbRVzzUbTrYny0kCuXsSiv4UfZKbNGk4+XMmEzDnW+Z558K8MDHPFjdLgUhrw==","signatures":[{"sig":"MEUCIDQf08TzH+XEb9fdaifF2oLQW83xiN72Wd/I8IhQoseKAiEA4yNXoluDLHFiCGNL24TIAjZYQoY8KHUcjD5u+q0HFuo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":422816,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhAIICCRA9TVsSAnZWagAAO3UP/jTWsEFH33PbjRMZUTim\ngf7Ud279Nys7n7gxk5vGg0Ygi9b7lplAy/fXsyQyJEMChcnWaKYCOp7reeX7\nU+qMiQ/0WgeAIbR92t3ksLt/LTos0Z0izXFjvuVS8n90gUta3CYkJ/dm594U\n6/kOluHJgbt8wqt9JL2g2SDQx8B9eX/MUKng8AGDMXea1RW1MtNt1oz0yzQ8\n7j+S/54f8NaRG6dmDvWza6Md/Q298nadhQdap3hF5YZv2O56yK6czE+V43fB\nqNk1RsP19ZTJRxUccgtQmRyfq9JVZ/+8X81Ni5yti2atelXA98AW/P/OHrXw\n1fU/Y3KDCS4+x4fc38uUwjWrevILgbE8TS6iYLHH4VKEJ+VOudjsJtHWUyD2\nlhs04Cj/URl8JMT8wh8xx54KWvREH+K/OLqplA8upgRpfiZG+C2c0zQ4Ol/V\nYJwQyEBrZ/t520ORny5Ef8dsVgc+FUwxW6eexeKZz5Ut4V/h7YuJkGx88vv4\nyDZ4c7RXG/S4C8F02AhEpAT/SmIcH40zv3YTivgYgfxqVvqJxwz+DUHzpVXU\nYuwBYMNePrsuWIp/h1dOjNI3uOZwDoPVrJFbcrXCUP/wYRGtHseKeel4a/p0\njxzVy+1AJ3jN+SKK+AZV5FBaQLlDflJkul35tW8IQhtuwoNzKIPYjD+FJVMs\nI7qv\r\n=Wuaj\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"113a7dae3c926e09c222ba963ad8e5097ea2c7f7","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.14.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^10.14.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.14.0_1627423234593_0.38896179048868973","host":"s3://npm-registry-packages"}},"11.0.1-alpha.10":{"name":"@brandingbrand/fsengage","version":"11.0.1-alpha.10","license":"MIT","_id":"@brandingbrand/fsengage@11.0.1-alpha.10","maintainers":[{"name":"elad.karni","email":"elad.karni@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"}],"dist":{"shasum":"4ec630eb741b2a5294df4303f79cf7eddc8ac376","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.1-alpha.10.tgz","fileCount":162,"integrity":"sha512-O2vepuwnY8dZg3VNPpbWcC8rLfUlrNRUn0/BqYLmrDL38q6ezeLC8rMGs+TfnxHGGueNQ1DeN80eb0iHAN0IzQ==","signatures":[{"sig":"MEYCIQCKTTuZ7o18UaU5Y2Kc7cn91/B6wxigytc+cyy/oM9+CAIhANlJDbTgnMPMZY1xJvo7PjKcn6C6YNOAg3Y7CWceSjkR","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":433774,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhCavkCRA9TVsSAnZWagAAU2MP/3L4SRbRTfZc8LaG5FJ1\n9xblX5muFYfWFW4dBQmHhUSKJypkH99j775UOviVk+JKsXKlunRGm0HtQb2e\nb1BfkMQDwloC1IjUgfQKGXIOmr3KpbkSKR2Rfm9tNsuiDrPUUm/6nQ1mnifX\n7NCeIUXot5HzWTzNJrezOaIRQ2Y+Xc7PK9/2Ee19MccazadAMboukw+/Bib/\nvCTsGztRzPKQ7Kn4xzVUP+Fz00//9y5JR+xHJWtbC8IliVmrA8O0URYVUTFs\ncK5NockirDtY/1QvyGdCE9EoMj65ZASIHJTK+erd/dOuKsq24sa7hSvcwgD+\nP1k1R11IYtjmiHSP/vYnG3Tmu7SL4THnBAdE5p+m+VtR0UIwO5hLcNr/imlU\nVeV1D14G1vNirxFNUb+30kiHl5tm936MguGv8n0jYs7hjOA8wt7PKJeMVDQB\n2tIwOH8p0ZPSjN6rWcLppPamzE5gvyP2UtRVpOrSrLu+bZylXdUzlMPok1VL\nUynAyFtlbuDN9rv7kip04GaLs5kaQWwerr3813N1uw5DYhwXW8nsIGYblKKp\nH1t9Df+LuFwjmR1AmORmIaUcCXn56T6tiELBsSEOQPk5PwzsY2pyruz5KWvY\n3bFsu//3vSN7p4RCW+K9rwFIsdOOhhxCNu89FJy85Tf9v0QFdVw0RrMqDpBs\n5f2W\r\n=sPYZ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"9cb52381d50ab1153948d1416c320204e9a35637","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.1-alpha.10","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.1-alpha.10","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.1-alpha.10_1628023780179_0.35825850322402175","host":"s3://npm-registry-packages"}},"11.0.1-alpha.11":{"name":"@brandingbrand/fsengage","version":"11.0.1-alpha.11","license":"MIT","_id":"@brandingbrand/fsengage@11.0.1-alpha.11","maintainers":[{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandonacb@gmail.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"}],"dist":{"shasum":"ec81983fe31edec26b421b301d1d6484055f4f5a","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.1-alpha.11.tgz","fileCount":162,"integrity":"sha512-WW+ACO4ECQohe0fcJCiT0nnAtUn5njO/KgQ9carNYmhftPVs/RmCp1UlDxXPytFZDrIfjdkvSQxSyNlb6gU3TQ==","signatures":[{"sig":"MEUCIQDmPuVTOMzWqBBQ46RMld6zZXTV/+70v7aMQ6++ea5HegIgUI22fbhKgQEOBjV6MlugCRag+ccBVHIILWbgKOTwJnI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":433965,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhEWU5CRA9TVsSAnZWagAAWnkP/1sytk5H0HoxEXvLXGM1\nMEHJ5FviPpd9uHZ91qbJ2BEtQxCvb1eTRqauSQikbH+VDPL3cIvaNtSHytBh\nRl39boODJlUJ0gqN4HntEKgKBxqzfdwEpoK6aC95A0gHzgQutAQxA4cLyp1T\nKETT9AEjwCucc6M4kU420hVBiH4GxjWBMEW8gjMr2Jeu0RxIm6Hy1hct7Bm/\nTC6YimRISFt23lhKrEXtbmFwqbOI1v70LAd5E3RyDm9reEOgSPldKmYcXJoW\nL+sxAzkcje7A0MCuEeydWBxPUDv1DARDbUrDet9x8/eXAOKnaCBJu4/PDKs8\nV4ZR3kA1QaWWnogq7H+mdzfKt/xHukYmbBKrnPSAe+Bmfq4avRW8U+PZJTZL\n8z2S632pUFeNTLNJvUUzAf6R0omse27SyJZr2kokF56dHREB8ZOafUe2fJfo\nuMKbeph3LsTrs+XTgYholQbd1+IwpYBKsFsHhIy6vFqwXrZOQqa4uE79gusD\nUB2K6n6KpxznfgRKwDZGNxg6MSOksUHm9gAHdv61qlb9zFWiOXdujpsPbQcN\n64sN+OMIxgjjfNNW+X9tVh0kEg6Lpyzr2KE3NynCr/66BmdraZfzcqnzCUCl\nOuvpEcEnjp0tRQso5m+XLRPRtd0hXK/c9CSBLCOZott+vE5o/DBkToxxcUsZ\nXXil\r\n=v1LS\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"4756506c94efe17d7d8d1264f68454536796bc69","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.1-alpha.11","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.1-alpha.11","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.1-alpha.11_1628529976909_0.6588381353708885","host":"s3://npm-registry-packages"}},"11.0.1-alpha.12":{"name":"@brandingbrand/fsengage","version":"11.0.1-alpha.12","license":"MIT","_id":"@brandingbrand/fsengage@11.0.1-alpha.12","maintainers":[{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"santoshdubasi","email":"santosh.dubasi@brandingbrand.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"}],"dist":{"shasum":"b3c1558f507581d0a8f450366fce3ac5a277f293","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.1-alpha.12.tgz","fileCount":162,"integrity":"sha512-fJy71Ezo9pw3f0IkyfDnRlP0sO0czs13YH6jj3z6ElI7EjOKM+KBpt4LY9pL5nCu3DVJuO/w/aRie2Y5/f+MCg==","signatures":[{"sig":"MEUCIQChFddET9n5xxiRNx5fsprRhXpbx3FZwPXpcFB5ZpSVowIgW0dYwcqIGZscB4VixoizFr68moMlPMMy6bnz+GE/A6o=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":434156,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhGtqYCRA9TVsSAnZWagAAym0P/jiVWrLzIIDmnfmgRqpP\nheJhNaOIQ3o1wFHVs/Q/PhMsPS2j8l3wqioLPheuR93CFAQQTNOO7b9gr6kO\ni9A1toRaEWeglUA4/jmuadvRicnWFLL+kYxdqTgGqQ1STzmc2owGPwc3b76E\nNtMGpdi4tZ3ndi8a7R+c993T77i3S4T4AjDVYykV1RwhpPARvs60YULiEUU9\nqRYQt/MrGCaInhWFdA6evBjzdpop3aAjuN7voa0oeeSksTfKgLoH+Sn6n6WH\nEJEci+VRKNfAOS5TiFFRaSB0ZGQJxGBvhd6E6Hwn/tz0hTe+sGj5MWOo6xd+\nClUi3djo0RNtlsw7vctHmKCSDmrv8Yuqsc9J6hILiHZrZyEC9fjql4qaLd2C\nnARZR7BE7Lo2C3jraAaI6PqbZ2gV7AtrHE3L7R7siiGYJjlmmvDCUu/k6lUm\n7C8eALvgrH4OjDQwyc6U8PtiuHTF4A3Vwc8A6Fh7kNL1ceitWJFc4HAq2czb\nnXFkgshFBIvjWjzkiILKztsn8sqjMUwa8dBZ3ocsneZ83GpGAhE1mCyS0k4G\nHDaBmFm++7QGQWNiOjikth7C3emzP5RLm2bM2YjFqqVWrQwpcSoOF/9wyuYQ\n0sZmDMBwMo54YMCr88p3UXG2ZUfr+cgNH8Yf1AOdlp3ype2C5NxQOwpNqCKX\n/Db+\r\n=KkQv\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"54b6d2ecccaad81ce2859b92d1c13205015ea66f","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.1-alpha.12","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.1-alpha.12","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.1-alpha.12_1629149848834_0.06329225993319265","host":"s3://npm-registry-packages"}},"11.0.1-alpha.13":{"name":"@brandingbrand/fsengage","version":"11.0.1-alpha.13","license":"MIT","_id":"@brandingbrand/fsengage@11.0.1-alpha.13","maintainers":[{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"}],"dist":{"shasum":"50c663e75f50df934d4ebf85de6217dd9567ec3b","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.1-alpha.13.tgz","fileCount":162,"integrity":"sha512-xBpzkxtHMMsJzUS4jU67bZxIx7apC2Rcxvvxn5CAhT7Gb92ERMqV0bZIdrDtQk5+BYRmKxzzAzupJjxLnP/oCA==","signatures":[{"sig":"MEQCIEE19mT+SJifsSGkFovK/pPm6wH2HQTPOE6a41+pVLxXAiBeV6HUBQgM5XZxCoQNj5SHXoiEAI6jGdE7pSFMccQKfA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":434347,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhHpBeCRA9TVsSAnZWagAAVdEQAIIy+kGe5H544xF/3P1f\nqRO4KAYhnkD7ih2Pfwsdqt5ok5InxrxCmTgwqO36Ry/t4R8YFZIudYvRenZw\n3qV4LoTyUx/XCZrI3+N7bp7pxUpHqra+OaEISAFqVtm9NZCJ03YHnyLe32tT\nkJOEuUQbXJ3od1KFpUv3XKNUlfofQK9qTRabLOZeg81LkaXcNnT9D73/kBkK\ncbbNkbYSfg/XR63ZQeKPJ/iMz4Vt/q6Mno2ljfMGYAwaWExdNNDyek3q/PFL\nfLcj0oRvmfS2a6N067n/6GGfslRQt1DFa9kH+ptlw3IqPzzEY0TDhW1c262Z\nU/dNnOCsbK5Vw3aBZ+3MXgJdPA3eZMazZMfauKP8NlGVQz/B2enE7XGBXu8o\nNJOEGFh3YWtveRsIdd+SAeoI7K42iyUxI+ojzSKa4xHfeMtrEsFk48mhb1qQ\nbiO4C//FIj30cTtf/kvh2dTpryUBATlidYtxumj4cmlxXnSX/bIuyas2Oa+m\n9PgdJnZVAUYIvEGLTQm6IUjN5uEPR8Xbf2Z/A25/DoUk+NCDfCE/VHwxbjAH\n9H3rhRDniBLFPJVseME65fX2tkVY7tK5pkm6AhuG/MTQ+BnimA9q9TLdMAiK\nLSCaPRNkmVeTb9p3lwpAmY6Bda8zCRph3CwEct6lmZLZcW1znxB4xxeWKhZm\nDo4Y\r\n=9/Pw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"d9d3c3f49c6ca447828a4b516d7f4372f8179d0b","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.1-alpha.13","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.1-alpha.13","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.1-alpha.13_1629392989977_0.35462934464913687","host":"s3://npm-registry-packages"}},"11.0.1-alpha.14":{"name":"@brandingbrand/fsengage","version":"11.0.1-alpha.14","license":"MIT","_id":"@brandingbrand/fsengage@11.0.1-alpha.14","maintainers":[{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"}],"dist":{"shasum":"c57dabb3f911136141b3aea50d009fd823f13c3f","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.1-alpha.14.tgz","fileCount":162,"integrity":"sha512-mTDCS36Xye0fC+dNO0iWnwdGd9OVUoHQySZfDpet9OxQFukLYVsMvYWc4v9dKD3PYt79/kH876nLRRP1U4dhNw==","signatures":[{"sig":"MEQCIDRM7MfEQN4cRwgCDHGDkbbV1dlQgzKQtd2qFTFmjgIKAiBr3JaQ8S9TbcoMHatsSDIHzrxIYgV9KHmzkGAmIOIejQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":434538,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhJpVdCRA9TVsSAnZWagAA9TsP/1blG5B9MgYOQy1pIsR3\nSQMyj02d9JZ4aPtcghwlySaYi2HEWqRZTiNYOfEu2D2O6umJELGRAm5bek6W\nDhCLHeNWyB+OfHCKRojNcBAwz0L9UZM1tH9+KFyvqM8ePKucaR1xTZ7a+IhB\nBywCDSeHSaSLOvxCD2x8TZR2Qrwy3sO4weVRoeBUxY4MfVmSsyvsu8D24IS8\nnPAVzoBnN7pRO9Nz9KYqDkIe1vA12Qx0LqMPo48SzzVOP0VsE4ikzidDJQWD\nCPCEgAATwLFYwvANOildsLmUsJ+MT2DTvQHz2yxeJYzrJau73reaPBW5e2SP\nHwpXOnY/AU3vx7TC0CeiQVuxZ/E7QIthUUk32DVEer7o69OqOKEW2gl28pZc\nOG/dBgAFK62+zWG3XV1dOd5+EXEaXg+i2yqT7nLlp7ys2O9PvkjQXCP4tYOG\nWzEUIzmMGeaJZW6AK+fpUL3ixAGms+qOtrK+okR2Ub/l2MyxwAsKSVwfYdHT\ncZgeXm/HlEAk9OD/atxfh1KXbZUtF8ngVT/qXP+5YjbcPFuyJOK6H8L5/8ej\nc0+pmVNJZtTuFfmGBAg4Fm+C5Wxpq4WcyHgK36HEITzL0erIGp7YSmZhUmDP\nwFQbmPO/s5pjpPvUhPtjWSJLxqQodqhDnfh2Vd2v7wZccEjV+C8CLxNCgLwI\nDcwP\r\n=CjQC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"c6a81cc85a2a9282da822c9bf488f458d41cc756","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.1-alpha.14","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.1-alpha.14","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.1-alpha.14_1629918557504_0.26480095114649416","host":"s3://npm-registry-packages"}},"11.0.1-alpha.15":{"name":"@brandingbrand/fsengage","version":"11.0.1-alpha.15","license":"MIT","_id":"@brandingbrand/fsengage@11.0.1-alpha.15","maintainers":[{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"}],"dist":{"shasum":"7ab7c3ba5124a418a4e625a5c099ed1a27d209ac","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.1-alpha.15.tgz","fileCount":162,"integrity":"sha512-9pxrC1pVgm8B872oN/f+jHcjAjLKw8+BpYxhHVZondMNFzNeA4fOvlG90zA9CUm/4Lne+DXPjtBr4IwxOdgz1g==","signatures":[{"sig":"MEUCIEt4ajHH+QRF2e2q4Ag77mU3kzD9/0nqOh3zUpKubq+kAiEAhgZHHwjKp3Qp0U889fifDMnhANiSp6TxEFI8mqSUiJY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":434729,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhKPp5CRA9TVsSAnZWagAAPKkP+wX7zxQWaf9Jy5UJLG4f\n3l7DoOpbId9ZwnP8+hKlY1dxZxJwY9CAvdApTuGq9yc7gdmT9/2JNu72gDuY\nsDDak9fkS4PRghuxP3z7cjLFvSb0uAO5qV2aZTmXt9IRc/FE1FnnILRw5MHu\nZXD5GJYYX5MAdiw5U6De4va7+yhqumnDmt6Ss8i3Xx8llbOqW7/ZxGtNRIfn\n2C+eNa7+x0E+8yCrueZrKNcXKIE/TL7Lrfkz5cQeWaYWmg33MjGNLZkeMARE\nf3PgufT0KyBRztN2MWuP6uiJtwUzbUrPgQa5oTUt7sI5O81fKlGTuX961N/M\nMBa/m1oGx42ZYEDcPjOVxiZgKwPx/m/+Orp8MULKRuUk8tBJMClDgUR/ZWr0\nRhB5VNrm33s90tSzkVENdbdqZ71IMTlFSX+grHIfEEERQ2NcLvb8Ig6p1uB5\nyoi1CNQtXodd46jPOyCwuIVQot1FN/qPgMoo2EIA+GBTDBKUAnxo5ArpkZ4p\nzkcj1bzyAgBRgSU288RXuaM7jtLAj7LGVN3RkCFl1axU58/SjIJQtd6wuJ+B\nrrBwskVgS6mqUvnEs5eQ5m5yKEXIDP5eDog/qkTKdaQqCxhrrWlMzT0wdVsu\nJCgeHLkJKYvFfogfGAZMV+3sfkqhXgtTcwvIe44XGGZDuGxffvzLTgwyiJI2\nlyOc\r\n=4nAS\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"b876d9f6307e89fafa5ed7c1daf42cf3dcb89eec","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.1-alpha.15","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.1-alpha.15","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.1-alpha.15_1630075513302_0.5007124933266918","host":"s3://npm-registry-packages"}},"11.0.1-alpha.16":{"name":"@brandingbrand/fsengage","version":"11.0.1-alpha.16","license":"MIT","_id":"@brandingbrand/fsengage@11.0.1-alpha.16","maintainers":[{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"saurabh7693","email":"saurabhjaiswal93@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"}],"dist":{"shasum":"f6c29514d4fbdbab805ce12714597dddcec63930","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.1-alpha.16.tgz","fileCount":162,"integrity":"sha512-Y5rlX37P2d1y6+Y8flWypwpkHF8uWCfILd40kGEhg2KCiPxHlDLJZA65BGpoUFzHwXCKrU2RFralnxAxD5dyzg==","signatures":[{"sig":"MEUCIFv9K8G9z0USzSvIlJ5gaxXy6Er5saqsa1TO3auan2IQAiEA1of2XkO/RLmhNjcNiL5Pm44DJRgpdju8kgpff8yZ8eE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":434920,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhL88PCRA9TVsSAnZWagAAnB8P/RfIbmLy6c08yE/PnJDC\nmNIpLzZto9RYdcqnyxZsUrovIfv9+5hPb4U1DeqtD4joORHs8k1R4wU4jKLc\nyC6ICB52Zctnbsw1okB1Dx2tZXyXNUfb+zBmPczIRyOkq/QoB7TJEk+5pfjL\noS1GphFqvJK6xiwkkeU1nldPRZGt7u/xzc2jDX/Z+8cEAZ9QbjQCAA0CSMt7\nqrX+fUpyKRVoGQ4ZgxAdK0DSURsIlMbGlsL0WXZH/CZxYGDocFZH5wr/AHVx\n9Bla6zxk7Z3GwL84oG8HVupEixZwqt2UMssfszCeX7wC8m0mmKOEwOgjPygy\ny7lqanawqNtCzLumhgbH6/YT+sUZaCZJ0u9/moKu7dq3+T8C1uZVZpgeagAn\nIOxg18wM2q1j2GMzDu7pp+To+Q6wHFCCgyzIZx0+ycd5xlIvDAuVNiKpB577\ns293AV3+UHw6KfyQ0DAHpFi9yfek2NII2P87gID6st0DS9ZlmrGJ5oiXzihG\nUNkIQyu9uyHp8AwjPw5SR5Wp/Xr3Ah2cDHDKvEUgSt92qudqu0dJ2l2SZ0dM\nP7yEl+YT6Xqmn1Y/gGUqEUfoeqQbZgW3JDnCBdGe+H1NnCcckFpD2dbnWIjH\nVUOs8UlIsvH4NyxG1C5w0aKLeMthS5zbxb+1e7Y2Oemn8OH9SCHzhIAXCWBV\nAp/w\r\n=Leyc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"6e72028eb8e62ad9a908ea505e00ddbb84ae1f9f","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.1-alpha.16","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.1-alpha.16","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.1-alpha.16_1630523150889_0.7777936425167751","host":"s3://npm-registry-packages"}},"11.0.1-alpha.17":{"name":"@brandingbrand/fsengage","version":"11.0.1-alpha.17","license":"MIT","_id":"@brandingbrand/fsengage@11.0.1-alpha.17","maintainers":[{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"}],"dist":{"shasum":"05fd1c1a7348dd80df9d9d281f3ea334c93bf789","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.1-alpha.17.tgz","fileCount":162,"integrity":"sha512-IVYtvzqPH0Mvkh5ZekfC43u+6aHQ51J/B6S9qAA3c9NHdmuzTB6nTNamrvPumGVT/vMI7gj4gGZR95hFHZardw==","signatures":[{"sig":"MEUCIF8K9MOjsy+80uSJzPHhOLKPI/YWER1/wN1vT/cDc93NAiEAqykyXPNqz+mYZuaE376lnj3CChmqY5WAMdzkkY9DD/g=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":435109,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhOQQ1CRA9TVsSAnZWagAAu5oP/1L3SE1AzsATeSuH1HmV\nHA0h+OPuP7FXubP0ip0z0fGYxNBff5iZdv3lCutZrZqZ23fVVNZ56QuLEJXR\n8Z+AsN8r9nnxkKp8hMQkhq+2SPHkXYWdP2vJPZUjg1STuVYEU+Bhk33CDsI3\n0wxPyZrfe3fHP9+tJ1x8u4ezJdrrfyIuvJpdUualcICUfH2e6M/lWQGhNgxy\n9/rHw9K7ioYKNsrDdz1M8MutvN11+FH1bMMqynOs94yR9zlzdpOODt9EesaX\nb9/sfREd9VF3IJbICsUJ+auh9Q6s1zWFRkHVgYiSYcekdLDjsPaxnUZtE8wl\n5kYCrG8o45TE8IP96zIn1m+lBQSBmz9XmAQqiJici2QuKvORtaXG7+hv+cIx\nebInL3HRGaG6JhnVelE2NeEu/xKe4pl5NAd1+NA5lmaOCR0QMaIVDeD6K7Ji\nKD2Igc/VgkiJKxp9eEF/T7xIcXAKedM786B3XoKruZOtISuWC6wrFcEFPSUE\nFLPTyX8bbw8gauyxRKSu4xceVVPLLjuXnYrfLDW6G5nryLDCzhAMWQsul1tD\nEfIHg339Bq5Uzlm/Kgn8MMJIttOLK1J+QZJhRZQsmxlEKBnnGpxuMmd1Tnfq\nx6sr1mhT1w7VEn8GtMogVRz/PJhDPqIIPNZ3UFJb+kFx1PjDC1LxdYrv6mJc\nbc14\r\n=W+MH\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"c3ff1fad37a9b16076c2f37a891205ddf57caff7","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"11.0.1-alpha.17","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"11.0.1-alpha.17","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.1-alpha.17_1631126581404_0.23761788703593778","host":"s3://npm-registry-packages"}},"11.0.0":{"name":"@brandingbrand/fsengage","version":"11.0.0","license":"MIT","_id":"@brandingbrand/fsengage@11.0.0","maintainers":[{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"jeromefitz","email":"j@jeromefitzgerald.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"joshblevins","email":"josh.blevins@brandingbrand.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"}],"dist":{"shasum":"70bf215833b23dc52a6a21252af9fcc2a8623171","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.0.0.tgz","fileCount":162,"integrity":"sha512-QSMO4iSr5NwFtow9R+jf5XHJS74zUzjwXHVPTG/OPmKKu8xzH0M/bDh0kI45khUxRI0TjiaGgtBQl2KXI+HhJw==","signatures":[{"sig":"MEQCIEWBvdURtpHk2Inox7/GrZofiN7b9P3Iv3t4U/ZXdbL8AiBGsdkmdofCmdNlDdMEwRQhyd8XwIydbDU5u0hmW2HS8g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":435256,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhOTJ+CRA9TVsSAnZWagAAQG0P/0Pl6YdVonXV6TteJXv0\nU5oF5Ho9tqIzTVU7qrGaIWi8IqhBkC7wdGdQFi1UwZ2IxJh/q6cV5vp57Ha1\nTgX9hjFwesO9Uwx2AkRE55fPM0qQ5u3EqrBg5D5QB7SgB1V8ss+vF5nNjOfW\nr2YnExgKcfUvPI6MoTA7xve7fxiEELCwj52z0gib9DepBKww/QakTejpra8j\nW0UKgo8ZluUplZugQQhvD604gG7Rpe1xxMAYzMKT12MDYgR8kysABZyrEVvb\n3PgerqFICjL+n4d0D1NDkd1/IeJfae8dnp/apyOWREzMnHtN2gVXaT+Kd5Mv\nUQJrT1vb9ba8Yy9FoZgXOvrUBiYEZ/p5CaOLcu5S3wuDrcYfLnHWmgiSp6LW\naEn8s4oSiGnkeGxAJ6b5CGC4ETDC6rcesp/GuZNvvzg3SH4y2RVNO/FDWunu\nTJRbuPvJ2FAo+hmq42W9Y9TW8dzQ+XiAjMqscRlMP08IWBJlSdg6JlbkIrEs\nNyhEcR/YNUQPMPaRaCoo/P00IdzunQKKXHTm4mOP4jm918gY/A2EV80zgNZh\ntDbNwPAPqdLCkfYd9ANvd7HiCN58duQ1Ng+4D4ngzwENhMBrBJTUQunvoQ7T\neJEmFARJdaYFs3+NYgVX7XBHvA4OLRA2uZ2pR7g9M3TQFCjGiKI69OKsFRpe\ngP5v\r\n=x60r\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"95a34b2582be6f41c2310a1dca95c2f2f20fc021","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.0.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.0.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.0.0_1631138430134_0.8831507121827629","host":"s3://npm-registry-packages"}},"11.1.0":{"name":"@brandingbrand/fsengage","version":"11.1.0","license":"MIT","_id":"@brandingbrand/fsengage@11.1.0","maintainers":[{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"patilsneha2907","email":"patilsneha2907@gmail.com"},{"name":"raghunandanp","email":"reddy.raghunandanui@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"angelotrif","email":"angelo.trifanoff@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"chukohsin","email":"chukohsin@gmail.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"cympak","email":"alexp.webwork@gmail.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"6a304c142099f03583de6b35d2a2bcc961d3505a","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.1.0.tgz","fileCount":162,"integrity":"sha512-9eeaQUPn8eYvmpfPTUOD2713r3ZG5vk66wmaizxgHd88RMCzYnvRTHWIDsErzM1//L7grOd2NR8mNcd82f1i2Q==","signatures":[{"sig":"MEUCIQDeOMLhch+RL9mzbH3Wt0VZSKJI8Nv+esH20tZmjmN+eQIgZSF8Mny39reFN+VI5LzQ05oLIYr2GdkwylmQRK6AhA4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":435419},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"b32ce81d0508f80586c5dbadad71f8e881782169","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.1.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.1.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.1.0_1632765580548_0.6515861823936626","host":"s3://npm-registry-packages"}},"10.15.0":{"name":"@brandingbrand/fsengage","version":"10.15.0","license":"MIT","_id":"@brandingbrand/fsengage@10.15.0","maintainers":[{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"patilsneha2907","email":"patilsneha2907@gmail.com"},{"name":"raghunandanp","email":"reddy.raghunandanui@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"angelotrif","email":"angelo.trifanoff@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"chukohsin","email":"chukohsin@gmail.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"cympak","email":"alexp.webwork@gmail.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"winterss","email":"winter.nes@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"kyleb59","email":"kyle.bennett@BetweenFiveAndNine.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"manjubillupalli","email":"manju.billupalli@gmail.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"fb09018e4f774f577f86c13d5853fbbf811d7895","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.15.0.tgz","fileCount":162,"integrity":"sha512-BIPgj4S/CtSuiCAexpjCtIa2DpOZLwFDTMxLX87YBvvBLfdcaXDuCMUOWzWJOjmMguw/RBbY0NOPErB6VSg4Fg==","signatures":[{"sig":"MEUCIQDAEp5UtzF5UkFDHPdPhF3oefklbVfhafCA6UGfyQmRDwIgN1jf8OpC8HXFQDRc+fFDbjGfFnWZUR0uB4BWW5zPPlw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":422982},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"d712dcd0b5f4bb180dc68babc4c43238a0602706","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.15.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^10.15.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.15.0_1633036511331_0.46199697719598287","host":"s3://npm-registry-packages"}},"11.2.0":{"name":"@brandingbrand/fsengage","version":"11.2.0","license":"MIT","_id":"@brandingbrand/fsengage@11.2.0","maintainers":[{"name":"prashanth_kaduluri","email":"kprashanth453@gmail.com"},{"name":"akilar","email":"akilarao3@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"raghunandanp","email":"reddy.raghunandanui@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"angelotrif","email":"angelo.trifanoff@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"chukohsin","email":"chukohsin@gmail.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"clockelliptic","email":"allenmichaelhart@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"c1cd1980eda089d15ce576a0c98602aa19f460c4","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.2.0.tgz","fileCount":162,"integrity":"sha512-msCu44MQg87XVA6PtmP2yeb3iR6PW3R6gTXc6cDPUuNLXXC/OZ3qhRG2eL/9fX29Ct43UuZ7FDLMC9sIZQjD6A==","signatures":[{"sig":"MEQCIDhMzWF5afOheZ3PvsCBmtVKRBl/l51B/vdR/P6iBZfTAiB5+0biam8yL3wvX39InkripwVOgOTpBdf2kNludjZv8A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":435582},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"9b3b5708519cc3940a12de92766d3755b8dfd36b","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.2.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.2.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.2.0_1635362344907_0.6940286327018184","host":"s3://npm-registry-packages"}},"11.3.0":{"name":"@brandingbrand/fsengage","version":"11.3.0","license":"MIT","_id":"@brandingbrand/fsengage@11.3.0","maintainers":[{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"prashanth_kaduluri","email":"kprashanth453@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"raghunandanp","email":"reddy.raghunandanui@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"angelotrif","email":"angelo.trifanoff@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"chukohsin","email":"chukohsin@gmail.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"6fe43c9e68bc2a20e7cf9bd83ebf5be91770e288","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.3.0.tgz","fileCount":162,"integrity":"sha512-AV5sVkvg4kvVV5Vu6TyTLs93b+n4S0aK/cs7CJGZ6Cc1VUZW6P5xZF6lKzEClJd5DWjnbE6V+k9K3hKwWK9Hyw==","signatures":[{"sig":"MEUCIQCjC2BiX/vAoyb23XZ/HswbP40uu8Bl1k4TYpJAqyIzoQIgXVeO5oqCJYIwLv+arJdwFrOqvCbMcm0K/TnTtrxsKA0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":435704},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"9cea8e1db8c51fe36ad1a48cc1b58ee005fbf0b8","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.3.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.3.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.3.0_1635536921462_0.9371858670385329","host":"s3://npm-registry-packages"}},"11.3.1":{"name":"@brandingbrand/fsengage","version":"11.3.1","license":"MIT","_id":"@brandingbrand/fsengage@11.3.1","maintainers":[{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"prashanth_kaduluri","email":"kprashanth453@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"raghunandanp","email":"reddy.raghunandanui@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"angelotrif","email":"angelo.trifanoff@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"chukohsin","email":"chukohsin@gmail.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"01017bf7c764ae57b9a9ddcca66a361e1a05a1b3","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.3.1.tgz","fileCount":162,"integrity":"sha512-a02DPrDPyFZA+Zj68esvOtQJwRGFPUCOpWII9krzze4+Wg8ur3z54Oiyvh1PvhK8VR3l9KlrFge2C/hNhSsBnw==","signatures":[{"sig":"MEUCICsya8cOtIJ8vu1/q0RSQUURDVtHMURno9O6WeDsZWtsAiEAlJRTx9FaWVMGvzedoY7AQpf4HcmGjJzKAo2TADSaQag=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":435868},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"770a9258ccaeb556114e3ea1eb69f1b700c6080c","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.3.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.3.1","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.3.1_1635952468177_0.7967274786028982","host":"s3://npm-registry-packages"}},"11.4.0":{"name":"@brandingbrand/fsengage","version":"11.4.0","license":"MIT","_id":"@brandingbrand/fsengage@11.4.0","maintainers":[{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"prashanth_kaduluri","email":"kprashanth453@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"raghunandanp","email":"reddy.raghunandanui@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"angelotrif","email":"angelo.trifanoff@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"chukohsin","email":"chukohsin@gmail.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"bodrus","email":"maxshop2010@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"bd9050bb98cc76535944317f0f5d221c07c0c83d","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.4.0.tgz","fileCount":162,"integrity":"sha512-RvwhAbSrIOvdprYSQSqk3C5JB5vgSdNDBzotkI1OGGtRbmGV65BZpOnvH0PsikpK8TQa2ZR3jb6JijESpxbQ+A==","signatures":[{"sig":"MEUCIC2YpqwjCZgyCrUpyaEHmJPEBA1jTE+bPim5LLaMoeQ8AiEAoLvCjVftGwXxhZ4+fZ7g2eYZLfn2SsQBAtFF9G8ENEQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":436031},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"5e47e17e4c18c5dcaeff28ab5f9ae2471c6a6e69","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.4.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.4.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.4.0_1636127235411_0.6179296597006132","host":"s3://npm-registry-packages"}},"10.16.0":{"name":"@brandingbrand/fsengage","version":"10.16.0","license":"MIT","_id":"@brandingbrand/fsengage@10.16.0","maintainers":[{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"prashanth_kaduluri","email":"kprashanth453@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"raghunandanp","email":"reddy.raghunandanui@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"angelotrif","email":"angelo.trifanoff@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"chukohsin","email":"chukohsin@gmail.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"0bda4991a829b21258229ee700a9dfef78d1dd9d","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.16.0.tgz","fileCount":162,"integrity":"sha512-2TTxcMjFEZNDGr9px3jZnj+HqqUa3Y6ST7SfHTvHPck3RVdzdzwoww50DYiOaphg45gcj603e40dByFo9j64Jw==","signatures":[{"sig":"MEQCIBLZktbnu5ioMxCPAsrhKWb8w5LB+MGiR173f68nXaShAiAxr5H/xm/JqiI5qgGtfHGRlW3DHTHNcsC0kJFf2dW7dg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":423148},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"4529d9b1fedc4a2dacae3faf35888564f61e5c08","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.16.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^10.16.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.16.0_1636148807147_0.8644302755804703","host":"s3://npm-registry-packages"}},"11.5.0":{"name":"@brandingbrand/fsengage","version":"11.5.0","license":"MIT","_id":"@brandingbrand/fsengage@11.5.0","maintainers":[{"name":"danyleikoserhii","email":"sergeydanyleuko@gmail.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"prashanth_kaduluri","email":"kprashanth453@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"raghunandanp","email":"reddy.raghunandanui@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"angelotrif","email":"angelo.trifanoff@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"chukohsin","email":"chukohsin@gmail.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"cc7c85df408554320c8c1e7bd5303492d0c79677","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.5.0.tgz","fileCount":162,"integrity":"sha512-3FWRbFgS9v7HBJ+H2K9fmCDB6Zp9tOOV8FpVnVaOXTADQRuKsvun4bDGObDCLUogG/DNrNVUYepOQlE4vQcWbg==","signatures":[{"sig":"MEUCIDyGFHdQOPQdfJit+/tAfPW6KjtMxAoyIhMeHlvZeZH9AiEArqtrpBUaBAbEmVc8WAI94NpbD75q5WIcKMNPXlhtNSM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":436194},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"394de5902a52376424b7d1b0ff97b7d1c9814e71","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.5.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.5.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.5.0_1636424613260_0.6777547895139495","host":"s3://npm-registry-packages"}},"10.17.0":{"name":"@brandingbrand/fsengage","version":"10.17.0","license":"MIT","_id":"@brandingbrand/fsengage@10.17.0","maintainers":[{"name":"danyleikoserhii","email":"sergeydanyleuko@gmail.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"prashanth_kaduluri","email":"kprashanth453@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"raghunandanp","email":"reddy.raghunandanui@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"angelotrif","email":"angelo.trifanoff@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"chukohsin","email":"chukohsin@gmail.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"677f7cef76e7c370fc43106ac416618e405919da","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.17.0.tgz","fileCount":162,"integrity":"sha512-kKzqOFunAgkP+6wySL2HKPeUGtiAvAr5GMDLLF3zp4Y0fL0DldZNSDEOES/0QDcNoAxXjXe31n6we5Km7MTcdg==","signatures":[{"sig":"MEUCIEUw/dMVGFej9goV+ZMgwV69udCSKbuY0RQwy3O1olaoAiEAwDR3yIgbJHArvrJkNaPQbmHNAPr4PsEqAa0sW+mqNFA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":423314},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"b052b6c5a1566bf82f05fa9bce4cecea9348f88d","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.17.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^10.17.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.17.0_1636428541729_0.9194935076943829","host":"s3://npm-registry-packages"}},"11.6.0":{"name":"@brandingbrand/fsengage","version":"11.6.0","license":"MIT","_id":"@brandingbrand/fsengage@11.6.0","maintainers":[{"name":"danyleikoserhii","email":"sergeydanyleuko@gmail.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"prashanth_kaduluri","email":"kprashanth453@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"raghunandanp","email":"reddy.raghunandanui@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"angelotrif","email":"angelo.trifanoff@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"chukohsin","email":"chukohsin@gmail.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"cbadee3ba4746fdaa7b3f7832ed2f8cf3febf752","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.6.0.tgz","fileCount":162,"integrity":"sha512-flCz/IYEaNtwF+pGJFSdZBYJIUeBmUG/1fzU6zAc2M4f/iUJfJoS2+thY6ObrT45sjEjzT2gRncz/XYPRXLIDw==","signatures":[{"sig":"MEUCIGQT87GQNxBOmfphUoVL54PtxI103lMh6VAp7hseVsr3AiEAhpKgj7ug4b80fCN/CyF2aXkUx0UUu3zA/W9hC8z53Mw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":436357},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"cfdde517c48fcc2587c8017ff5ccd0ffb44edf6c","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.6.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.6.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.6.0_1636584115378_0.17682003493024845","host":"s3://npm-registry-packages"}},"11.7.0":{"name":"@brandingbrand/fsengage","version":"11.7.0","license":"MIT","_id":"@brandingbrand/fsengage@11.7.0","maintainers":[{"name":"danyleikoserhii","email":"sergeydanyleuko@gmail.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"angelotrif","email":"angelo.trifanoff@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"chukohsin","email":"chukohsin@gmail.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"19787f3dde3de6cea342371b66fa8a4aa829ecae","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.7.0.tgz","fileCount":162,"integrity":"sha512-O00kvDKyDotT+lXx59sM24imNuPtPiLola6izk6Lthbba1sDt8d/Ot8NS2CbXGfQjfxN6p8v/s2diaCCTZSftw==","signatures":[{"sig":"MEQCIBPKfq1rKxElWhwolTgmZLYAgKqy3GLqDNbUE8jpSpDjAiAt4At7yJTv7vZUforMbk9nzg4JRkCQqIVkRxUAJkLANA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":436518,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhlS/fCRA9TVsSAnZWagAAY6AP/RLAArtqhVpJOw8j4BM1\nSDeSyou9TJXewm/LYS3Hgctu0PaQl0XrWZbL+dl45JnyYpSQHAB4/Iekrb2z\nIou8geNtJsTPGWAYw71R9nfUKluFnFo+bSU4c48jcBnPpcFxC07b8W5TUOto\nmTmN8IN0NKQq7mmX00ddsngJFiTEhKbqSXSesFhIzoS13KH4pcMe+hVeRu9u\nRqKlNJnTKXvydH0YwoQ4MnqaVn191Dqx9To1AX653Mg9XB4UcpklkSpPvjEA\nSTTZ5Fl2dORvKng06vs1csJUJvW9J8kwnm3J+ISAWeIXBzN3AT40VtMwehlB\nKMdo3P7gyPv6DE/cyX+OK1l1eFgxi5OTgiahpamnet2O3yh1Z9EtmgB/NhTu\nHvUngwW4Psmj/NHcZkGCD5w1AyH7XL1x3zPBqgJt7SKVGF7JJW50iK3BJwyq\nVTz2LpHzf9O1q7HFdi2KJ9DR8T/pV0Zs8vLdPlUBpjYKQoU0k5w48xwE+U2p\nheRoTMjJtQjLW3jPFoxOMB9RJ95K9vQ3Od1VMqixV/rYYjXOpH4SdN6YtKkz\n8ut5Eu1KBP5iEaCUzFElF+y2mmoZfjdfLGEe8g5FK0pbDoC4t7Q7DqMc3qvw\nZRjxEi4NpY5sN5lU3MId4R1AFutm8I40z5ZxCuMlyzHqvTi8UwAnVlutcMQa\nDoeD\r\n=oyaa\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"06eb68be1bbdf2f7f3b8b31e209fa125102f10ae","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.7.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.7.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.7.0_1637167071295_0.974999102873036","host":"s3://npm-registry-packages"}},"11.8.0":{"name":"@brandingbrand/fsengage","version":"11.8.0","license":"MIT","_id":"@brandingbrand/fsengage@11.8.0","maintainers":[{"name":"danyleikoserhii","email":"sergeydanyleuko@gmail.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"angelotrif","email":"angelo.trifanoff@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"chukohsin","email":"chukohsin@gmail.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"d3b5531b8902f88639d87742fbb1f171695ada00","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.8.0.tgz","fileCount":162,"integrity":"sha512-uGvc/A6fsfc/GbOE8k2/+EIhwSFIJxHgiGa4M+ScneL+gwQjH95KDfcDHAYq30Qz6x9iNU5OfjpUPblcHQmHbg==","signatures":[{"sig":"MEYCIQCDrVO42m3EbdQ3y2oW0EUKAEe6dFJBDoRu13yyRqehwgIhAMBYu/DTeiP5G4CAHDvfujOZXC0gcnAh9s8kgNn74RPq","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":436681,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhlX0ACRA9TVsSAnZWagAAiFIP/2DxH/Q486YVJ2OZyPa6\nna2i6t3/OiIPAa5w5GhPSfmvcsyXENVsqZnA9CindLzA3CrZntgRleatP1OQ\nyAPQ5CQDSWZYcR+tQkAtvqOh7RkJ/cKNxyjzuYF9GgyyrA9uMhuUnqd+x4gN\nh/cS1J7Id1vOeFc9WLUmskmktSKsZAX4eTTojccK1MdebfXs1jNpWvN1ccCO\nEkitgNNnF5emTi6GWw1hoXSi1buv6rMH4E6xNIZDdZD9cokzMkLS2IqpOIgk\nBNBF7h6NVIE5KR0lFvv5dItwjVa4xOKQyHLudc5U+ukRj+RwjB1uYC3Yw2Mw\naSbKup81VxaYGCfTk+n0CjG0rNupRtC/FuNSS3KOj6RUjbVmcn28gCSa517p\nt2HBctB248MD1Qc+Ade4vFG+UTYsmCH20Z/8ituFZJ+BUblWz+6mEOyLBFeu\n3ZKMTRXePwk9DWUfyPngpGU7PoYf6Sm4u8HFboGdZLXAQES0Y87j/DAul5ul\nezd05/b/Co4NEXze3hN3Fsspvm5eLZszFIodi2yPsO4/bu5TrgTnK+GK+SSP\nZZ7u/lvuWkKX/2E13wkzbRg0O5vtEV1B8TQJXmNWHms8XtEAHUQ/TRRBwWwq\nJ2bFWNolzaztBBhAwBpsm0NRi3vcmefKbM6JQh5O5tTpK2YykdokoOaPpqWf\ndOS5\r\n=mJF7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"73199f5bc8da410db20b2e6ca8bd69abfe23cecc","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.8.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.8.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.8.0_1637186816356_0.9669295495824102","host":"s3://npm-registry-packages"}},"10.17.1":{"name":"@brandingbrand/fsengage","version":"10.17.1","license":"MIT","_id":"@brandingbrand/fsengage@10.17.1","maintainers":[{"name":"danyleikoserhii","email":"sergeydanyleuko@gmail.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"angelotrif","email":"angelo.trifanoff@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"chukohsin","email":"chukohsin@gmail.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"8bb5e1af640c7ce2c376703fe767dfc97f00a19c","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.17.1.tgz","fileCount":162,"integrity":"sha512-iIbczT9S+Di8vAa4PirEX++UAQOVM4LTcyOrpwQVDUyzqpMz6nQiUaYAs9clqe1dFSF71jaGgVUron4+KmifeA==","signatures":[{"sig":"MEQCIANHO3aliiQSpfaPRJUJC7z850Qa1CXJAGZjji8dVOYrAiBY810IgUzJYJpOreZoJ5kcQ4PN7TwyxKVaarDkrrcEwA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":423481,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhlqoICRA9TVsSAnZWagAAiW4P+gIevg0hLmOfoCTQC4tZ\nuJGe9xrEa2WwvnlC1PKTJpkV/+60W/jx2zzvE9HKgog9mw2bVV0kekg0Xlw9\nkeFtwKHo3toq98KLaRRy0Url1f7e0/WaBagPOpHktWC8E0F4CxcCz+4+vFa1\n/zc1/uxHzUb8+xE9y1uGOQxRCWnALxWJ6BkVrn6HiYt+wF1Px7W84OGuxZow\nFsrrbxQCl+qVUITtI6U2f9H7HV7yD9pwzjQdmIEqZaNWV7ewzDQ+GG7gHGCU\nrp27I+Fj8Xi3NzWyy+/3mGUFm/mfqbc8wlBiiNM1PIckcfbB9ZIuIZvi2+Eu\nbWLJ/vaWLvbp6xNGPMs/FBn7Uj5uWT/qES7esgSXToLiOPhy3uKbuJo5H7Xz\nRCHkels4N0fc6R3Zxo9CSfhr3f7QMZ/UbC6SExJJM5bfbvWZGmAJXbrPvcp8\nIv2wdFVANKnLQJoPuKKHwUMsI6NmVSWQeM+xsXi8YVlVl5oWl3UFXkI2h9+Y\nlU4oH/eQkaGUsXsIhVuglz8O9Zr2+AbpQDz+TdfdZJ1x0HbgBsZC2BqTJyi1\n+yVfRL0R3opmC6JJJm7soqreHPGQi4kIp1QgfBfiZyIsTcLnzd4bhpb+QfOX\n/VtgUHQRtvsORpvRwmSFRrcoX8TukOc9Zv/htpXocq47i0BOlcYCSUS77GkO\ndeFU\r\n=hJED\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"822ae82c6627a25432a466897a6a898b527af58a","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.17.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^10.17.1","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.17.1_1637263879957_0.10172745323163812","host":"s3://npm-registry-packages"}},"11.8.1":{"name":"@brandingbrand/fsengage","version":"11.8.1","license":"MIT","_id":"@brandingbrand/fsengage@11.8.1","maintainers":[{"name":"danyleikoserhii","email":"sergeydanyleuko@gmail.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"angelotrif","email":"angelo.trifanoff@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"jamesgraham2595","email":"james.graham2595@gmail.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"ea0ac75532be76e3c9b1b3bfbb914228c4501839","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.8.1.tgz","fileCount":162,"integrity":"sha512-GJ0OSkY5Jpg9FICKBOqGNv36gnhVqDEgNu0dcXrNZpXcu0ORdamSmMoRRaQ6A4H5AviaW+TGWc0blPbPbT46Ug==","signatures":[{"sig":"MEYCIQDBBv4VlD/EbDU+msJVy6uePPMKRNTCq9F3H5Q6eZhTwgIhAN4TLjHwo68zFZxmz+VN3Ev8pSOlQ6P+0qwWjN4AkYOm","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":436845,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhl+CMCRA9TVsSAnZWagAAmSEQAKNsrJean4CCqK7A9iPP\niXqw5ZdE0SMkDgTOO25bq24JHkDR+X60xUfPS3CUNp2eqpmLUVJaUAv4XmbZ\noDp8vqo7v1hdiJUbnzEIKSRj6dlNRn38wnjiKSLnvQysOg+mqrZ7kBXP5GVa\nfjidKymPF2xBBlgfnyiYA4EhxnGuz/XXay5HldR9P+WWUgQyXIvOcSMxUSEa\nJvlbZkPzpuwP4tgNlzBYRLdKNCRRBqsFazMQyPYoD09KBt9PNT7QNWjBRRdd\nbSMj1OAbh9Bur0mUDtPn0UoI1zay65HRoJzGVRJiQ9lYstziNxKOfTfqt/UO\nr7PzfvcoRRxQkpychUmXGiRJcrsUauDfUFfWKvw9vJOejxqEmGARsy50Il4R\n91WHDxoH2DYSv2KxjxFDn2ZmLBSSC6OrOi4X9iITm/LISlgw7llnhRQSBz5L\ncFrfeElc96Y4m55MnYboq/slTNd4WwLXwqlDSWLaB6CpSBefEZBmySbnumNf\ndlcFnoQOOAl/8rtsW/r0XGUGOvht6qmHoLLXD46nSBHxnQzVPdYZ1ejX3fKz\ny1pXaYmKZICYGCICJRuYeWUApMMkdN17N5/Tza3R8hK/BXsEaiBhbqXbC3gl\n3epXzMEDsQpU0JerpDiEaUBE5jff2zHyLdyk4lN73ctFAfBq7JJt5Xrq6Xnn\nbLF3\r\n=/uI/\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"2a85e1d62293e2435c47ad924c1a291a70f765a3","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.8.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.8.1","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.8.1_1637343372647_0.04002818613589798","host":"s3://npm-registry-packages"}},"11.9.0":{"name":"@brandingbrand/fsengage","version":"11.9.0","license":"MIT","_id":"@brandingbrand/fsengage@11.9.0","maintainers":[{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"danyleikoserhii","email":"sergeydanyleuko@gmail.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"angelotrif","email":"angelo.trifanoff@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"98d66180a382bd99fdc94631a47009bd9827e620","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.9.0.tgz","fileCount":162,"integrity":"sha512-FoD2pxYTxS4Bcmv8iAHIsrQ7CcKIzG914PnYeumcf5N0Nc8HTg8+/AuWTfKbA5GDJqr+qDSy0IzQH2CABaXflQ==","signatures":[{"sig":"MEUCIQCncXFOqV4S4M2guQkr1Z++iNLuHR/VGRsqJRAzdlHuVAIgf2BxFRXXu+Brg3ocKx/HwShn4K++TPvwxiCkR7KFT7w=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":437008,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhqRSMCRA9TVsSAnZWagAAj+sP/jCi27uyb3iF4kvwAOK8\nzxAX6xfDuCismHizsf3eo9I2VKIl7VdxIr5bikJ9z+wTq76+4TOLXPRYh/VX\nPlzDvFq+k+kcA+GopN4f+rUz0trXat7yDdgOOeBqPz0HbNbVIrNejxKeKAB/\nxfZj763/YlhBu73w+qcEKpP6ZvSDSEyIUKyORGcNgaCQfZ8QPUYrQAT2+Lv2\nA5DPVZqyU2ri2S0mAs0eS1kOA1x6EMMIj9XrRS6YuJ5a+E7H1h1Y+vBv3xWx\nzc+esM7EjMoMeDNEs5STuHCeYHSHT7TkafOLU20sNq4j+prHjCCY/oaJRKaK\nEUdJXy2ygLrgLDJ2oyRj4/JlDvNVCpCoKpwKRTmS3ZF9/TLIojrX1jwD9zjZ\nLp39EVTkn4mbndRS9wJ0yWHvQvgSMhsY6udBnwSxmHABT7UJi9mlUT3CieI9\noqdxjnSgDdNOdxsqsT74mk3XfcsHjSbl0c9BGTE6OwE+rSb5sk91kuAYNPMU\nY92jTrHl/tRp0M6ik/yCKfqo9ZSSnqh554BmkdpXVCA/vkY2ZbuPBhM2yZCE\nXytDack7n7Tcg7303BRE8qn0ZCz6iEBMc4FUiXzdOkFQKb1HugiL5i8wp+Lh\nY1s9qFN6cx5Dx708VzHqVXct1bPVgTDgpYW4GxJroeJr+WhclM7+04S+/5A1\nXYIS\r\n=Q/Os\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"1133892b9e091175da59847fc47f95adeb90f752","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.9.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.9.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.9.0_1638470796578_0.5178873274692888","host":"s3://npm-registry-packages"}},"11.9.1":{"name":"@brandingbrand/fsengage","version":"11.9.1","license":"MIT","_id":"@brandingbrand/fsengage@11.9.1","maintainers":[{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"danyleikoserhii","email":"sergeydanyleuko@gmail.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"angelotrif","email":"angelo.trifanoff@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"erichfeinstein","email":"erichfeinstein@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"6fd1cf27620d4a423e8fe85db8487db4d8b5ebc6","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.9.1.tgz","fileCount":162,"integrity":"sha512-ab6rpNV3TP2XBD6PqjqqI213wOM5hPU8uKVA1wpqnJ1uk7nsAoWAALVltfsIbS/BejVBlh797E5eIZpPGz4QIA==","signatures":[{"sig":"MEQCIFaT5xnZMx5QI9/yT67Sf3B7+VAO0q89/0N9loIueIeOAiBNOcwE0hxVcBa/wDigfYrp8HxiwFuJXGwxgkk1kGK7Fg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":437172,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhrjkECRA9TVsSAnZWagAAsBMP/jvNJ+w6maD6pNcIQZtP\n6uDDkSX5toO1ValCm8ofbzRNMnlqQU+Su0xN79izBBEmZOZptX+UssHLbcdK\nJVEOLScMMA3nKKNpH47MSri92FWZfRS+tah9kJrpfpJFtCTwnANjuDKtSs6G\nGq5UxdaObdAgQMswTdFAOhLzP+LBpcDbrSOtEikBpXl+Zumvm5s0Se8rzMO4\nhcq/7qbRxbQdlvuzAFItfDLtfzrC5+HD7rj+jnruWNKHo7sXEP4oAt/gZ/P1\naCr3Q5osOw5A6eBwH/RHv+5YZ/rMIUUptOwHTNRL7z24J3Or5Wb9OoYNl26p\nWTKt7gLo009+u5+rpbW+e1GZ7LOy5NBUK33f0JuYH5ZQFU6K1vEV9ijJ+urz\npFxyNoRHlKI7/qqxHBS1VosAM95CeqfsBBt6jS0Ol2S9KtqVX68JVaNSpAHV\nG5TD8Elsh6Pb0/ePUItngn7uNOQYt04fym0tq+nqcLqN0cbvnFn25cwVyWZO\nSkaTuOvfJiwowWa6vpr7+amlfZp5veOqvjvQUw58RviyHq/v38GbNg94u5ZZ\nWsys0rM45KlOai2yb8FVUdsq4RZpOj6V2A7bt5iSsfhadeltAbVHYKZlFarr\nVdtjwSYyZJuY8WpOwDx5/AlNsyLR0TD5oHivW6VM+uxkS/G0VU59k7LRMeA2\n3vpS\r\n=uJtS\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"82fbc109e480581eeca7f36dca342629b06a3184","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.9.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.9.1","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.9.1_1638807812554_0.4865748989249892","host":"s3://npm-registry-packages"}},"10.17.2":{"name":"@brandingbrand/fsengage","version":"10.17.2","license":"MIT","_id":"@brandingbrand/fsengage@10.17.2","maintainers":[{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"danyleikoserhii","email":"sergeydanyleuko@gmail.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"c45d915aa63b97b422aca0a673a281224a144310","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.17.2.tgz","fileCount":162,"integrity":"sha512-m8BI+JP6j5thWklUhhxywrYaCnlKrsJhqnutCerAJAB2hzyKYftPWTA304YihTFT25IG+qeU+2KmN1hFTglD6A==","signatures":[{"sig":"MEUCIQDBYtpRGUttJ0Y8ZMScoxvW3YOHJGsCoaiY0tgv+444CQIgYBnGltx6DedauOzjrhGNHWzHY7rDmYsiM7csj8KdD60=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":423648,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhr93yCRA9TVsSAnZWagAAcr4P/27FVASreyd/2B6KX3FQ\ntOhD/tWHPJGyASLz9AtzCKip7S7vzCQkoYeOLtpApmrqIprUu21Ay08nuPjV\nE/RIuSws4yCXbLilJFdM5+Cf9GN2SXUvw58EY+g+Bkjj1SN5Gs2qQJL0A+5i\nOk6eBZdJ7isOilwBjooXwCuwW51/xvFknD3Dys2a0qaW3+vIgD5EjTOeKKOM\nKjngBwbhd+5gYIp9cRBtW/orqiXZq5YzYLFKYDBlDj92kmwb4vvbht1n0kuA\nkr/AHKvY9i6woif46T+2kv4ilOqaCAPIr1mNPSQYF+lmhVZfnofUo77Oe/Df\nh+SShJflqWfw4skh6bqQKlj65srWHqI7tsFkImf7sGO0RefnlOIOmA7TjAJz\nWKqCbbuctMacalAkflQiZklbCZMlTmAbhcyk/jAHKepRnD8a1ElZKb/YPbu1\n/u4/1CcrVYs8nf3yXpoBUEyhO2UPU4MJ88xtuJQmPzfwf0FWj8iJPLkVy5uU\nCglTOpqBPCRAojNsPhqCNG1jY+h4tCGWQYN1yFFZklWEkuRBKXpy1UA9Grdr\nmZRW2S2t/sAc7F6lKdnf7K1ayKcSZYlygc1s8ZHJ/AZf3CBTvwNqwVpIAuOK\ni3biELUXnbp9+k6drkWTsYcm1XYeey9PjcA1MtryfN1AEXt5kIePbcnVmepu\nSoDU\r\n=pbDn\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"85c9bb60964b0597555b9cfde319cb985e1bbb4a","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.17.2","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^10.17.2","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.17.2_1638915570387_0.2872925547667844","host":"s3://npm-registry-packages"}},"11.10.0":{"name":"@brandingbrand/fsengage","version":"11.10.0","license":"MIT","_id":"@brandingbrand/fsengage@11.10.0","maintainers":[{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"danyleikoserhii","email":"sergeydanyleuko@gmail.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"celuchnb","email":"noah.celuch@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"wsedlacekc@gmail.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"9a449f713422973beaca6dac69cfbde7c5fcebb1","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.10.0.tgz","fileCount":162,"integrity":"sha512-3A3ViuQY0BzOEAa7oRilMDRHbyNzJcNWTVpvqLRp1HG/ZAg565vaLVm7Fx/SYNQ4NvuOnTd2PqzW57qPSQEciQ==","signatures":[{"sig":"MEUCIB57cGHGGo6hKktmBJzZhVzyfMwg7eomUZSziWFo3Lf5AiEAwsz3zkmaBGtX6Ol+Tfkmx+2Ss+DjPgUy3k4bZhHjzcM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":437340,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhsOChCRA9TVsSAnZWagAAPhAP/3Saywd2tgzy5GrWq6SO\nveGwPwX5wzSjo9DeB2Cn/ysUCGtwV4TLdw+xMZym9xduvauRvKyq2ByWqIbn\nYLIGewW897gBWtMFBNroyuDlNwGeuthztDhj2l+SNYd9+uTqlT1ekROgY6qN\n80EvSYuVO2M3rteuICG3LG6gX4uhlbp91+b6haYVWhOPPG4aodaqQ98xHK0X\nTtKrP9oTzA2jVcpZ5G5MnvDy/EEmNbCFEyAeaKASqpohwMXPHrrnDv9waAMy\n31ZhLIpp0U3R25FvbmzR0JTvFqhKpKHoqqX5omwfyR/MXj56kqCYaqovI3tX\nz/bcMP8MMaOpn6f5cG+gKgaVeDw3lCQb6BTmjMB7iaC/IrutBo6HnKkZ6Xvq\n9qxWc8Wm8AeTZy1Jdj+ZBf4V7L98cQtkvZwy/KKAu4WqeYShV88K+X5HIiHG\nGrjkoHDrkUacuPrYlUYiO8VBo7U3celxe8dGUN+rl4h4SIbQzH5NrDcPhTp4\nNfSf1EDzQYwzXCrCqYfdAHKPZuVFNKys3NfAxUWH1eiv3kwxdoL3uwtfytFq\nqYittIEHzCMkf8eQfshk4zC4UbQgTOYGEEm7zZRkgF0J217Aq7aS7acADbKo\nyqM0TywOFQNK6JsgHSesfrVyjbjVqKdlNH/jQ71xPw6iiaol5RFVkyNUMEJW\nPE2w\r\n=vuOq\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"825c19f4c42eaf3c84ddd1ef4e1bc69c69fbfdb9","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^11.10.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^11.10.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.10.0_1638981792995_0.8455522528213946","host":"s3://npm-registry-packages"}},"10.18.0":{"name":"@brandingbrand/fsengage","version":"10.18.0","license":"MIT","_id":"@brandingbrand/fsengage@10.18.0","maintainers":[{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"danyleikoserhii","email":"sergeydanyleuko@gmail.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"1ec4d302f059cf174a516ce6a9970934b90e8c4c","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.18.0.tgz","fileCount":162,"integrity":"sha512-T+2CUby79s52TsZBJgC4lqRmxL5yjtHwRtGYs3R17Qjhaj2Z3h2GlgmoyeuMdHGtd2k3wuXLRaJ5L71CpkTlsQ==","signatures":[{"sig":"MEUCIQCDvH3IFkoLhzLiubtiuq3y0KKllwtT0XdyuQj6EFEfMAIgATnySpt/n8AZl1yKYLAGkWLdsAYRAQVHX3xsZspCM9U=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":423814,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh1LLNCRA9TVsSAnZWagAA4s8QAJ6MdfwejHqdJdA2gib7\n6K8RwVBLqh2+zYiCy4rEjpVrgMpW5+E55Xj8oiozgLkH9fte8sUO2G8Ub1h+\nh/Bcszv94ESgHxF8yE9LaSXgPGMM+xIFizG5xEc1J3mgYEzP+w5nR5XVlBRp\ney2hCCWDbtE02y0h033eGwSrW6qRNvTVn8irOMeSjk8B0aTfkcRjPV5yggnU\nbl/rwnxkPMsevHYQz/DLF026bLDahTSIZVTgLRXRwOj2TTaGHrKmf6rCZ9ZD\n6ApI6qWrgFjzMhxVZt8BQAJyGfh7eWiXbBs/D0h/u3hZ5mBTIJFi6tp1WJ+b\ntcCA6l/1RhTld2Fn+WHx/Nrf1EsfSs90Bp9HAhQ1wopsG/z13tUwZ1LoVNnA\n7BvQzaJjpUjPdQtyBYWz8746nV/dVWYgZq6WC6fjv1bK4XHLtRCr8Uy/M5IF\nXThN18WtIH8NJ+Qfb7gyH5ayaiLHuJo6TaV/CdGc7aWfc0Ve6nQ1Brc/CZgB\n/Ydqjy6clBheqgWeXX3xQz7nBy6Q0qVd2lbkOplrHpsc704J9Lo5AtGHIfZZ\nV6UlGhQ5hegfbE7NfQUQBSXZk1bMFy7XiTMp6MVhvu0r4RSkXMYjcA7b5daf\nH7c0upzq5Ip41uP4kgDL94Sw5Oyc+QU8Ckmh+RgKaGizKzWnnoRIgnLtqiVQ\nBVur\r\n=ybFa\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"8c61716a91c86aeba915f296d24527e588a35ce1","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.18.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^10.18.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.18.0_1641329357806_0.4909701012329488","host":"s3://npm-registry-packages"}},"11.18.0":{"name":"@brandingbrand/fsengage","version":"11.18.0","license":"MIT","_id":"@brandingbrand/fsengage@11.18.0","maintainers":[{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"danyleikoserhii","email":"sergeydanyleuko@gmail.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"131cab1cb091e16cf28aa6bdaa48a6a256aa4917","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.18.0.tgz","fileCount":111,"integrity":"sha512-IrBDLiHbsEPnttVC9UQ5IffBxbWG8gjWYHojhGKaSJWkS59YgWuuloFuKdcVJfJDZdE5EHFQ4jUNhRAQFt2pvQ==","signatures":[{"sig":"MEUCIQCu4fVJ1v0mS7dYh4ru6lKT4R2+4rlH4dWfGqTmcYY6RgIgcZCapR31xQZo3CpEZRI9Lpm1rudeHs5kcB1oIV2gKr0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":276387,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh4HNPCRA9TVsSAnZWagAAU0EP/0YFFyxX2Om3x/BcWuWN\ndem+TpxWPxzlSm/FTTJL71GqRHm9C1vjSsOSo2OeHjWdePqcF9AdggA4Opub\nJtsAcK4/0jBXRrjwj6B/hNIYGNy0DMzEFrqHcP+PUx3vJCoL4kvFyhllG1Tj\nmNYdunD2xQwi6vfO855d5ffHmieuBZHsw09yWR+P+hufgtbfyI6NJnrrBwrX\nLeNw1JzJtZC8ALdFbXE/5xsfG9EvZ0Rpa5Omqx2chqclnQSxuzPapSBRxv+I\nCn2z7RSDp+IwHq10X0JowGX6Sobgqu8imVCJJt2uXfwss62fBUl9M1wv6bg7\nXnoDcxZzu/r0BinHJggzkvB2eVZMzbSnDPsjrq//8b/zkAs6f2ErNBHH4nmy\nbPMYjHSTe23EOUn1TJqeGtuYahnm/OuW4mgzZNhYvS474lHxS6WRAmen7O+h\n9fgvZ8IXPqqOJQF3uSYCs7AHzuJdgK2Tb4juSIfWjIURwJObk+EbhwWMIL1t\n9p76BDYdG8F32TDCfNaL/FhOOTLdCmdNyl+Q11oZRdwgUKP7pTLwluO22LC1\nPcRcEQ7q98/+fZoyc1sBHfy6TPIxCMB8Qsmh4xnE9dU0J0dMxO8XU3LsCjY8\n2Bbm8gg1rY8iZJyqOjFQp6GtQxWA89URky/Rxv/TDb82FrYTYQSsmGmM66H5\ng+H/\r\n=Wz9l\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"3e6f3efb295711d254febf58c324186c4697489c","typings":"./src/index.d.ts","_npmUser":{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},"_npmVersion":"7.24.2","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"axios":"~0.24.0","redux":"^4.1.2","url-parse":"^1.4.3","decimal.js":"^10.0.1","@brandingbrand/fsnetwork":"11.18.0","react-native-permissions":"^2.2.2","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"11.18.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.18.0_1642099535105_0.29454383603793177","host":"s3://npm-registry-packages"}},"11.18.1":{"name":"@brandingbrand/fsengage","version":"11.18.1","license":"MIT","_id":"@brandingbrand/fsengage@11.18.1","maintainers":[{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"danyleikoserhii","email":"sergeydanyleuko@gmail.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"17c95fb5fc0749d796755a67a90af3fe4867b343","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.18.1.tgz","fileCount":111,"integrity":"sha512-JUjLWrxgI5d72p0igcQ1Z33bKUNw9H73p6NBb8OXCS8yGy1/e5H1ObGgfqWctEuBDcUmW8wemy+Hwri9shxPhQ==","signatures":[{"sig":"MEUCID+GJkjzklOwJEaKq3QWQk4rFgBNSYsXOIT8fOgduSoVAiEAmeFHa+fGwwBHICarNXXj1W4FxYepzySVJhFlcilhOTc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":276487,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh4IIiCRA9TVsSAnZWagAArO0P/0zkQqiEEurXal9hHhRx\ny6EbMUEiwax7fX/kzDy25khmtC94dTBbuTNzdafMpC+qQvyYXBFzBrwTeGhN\nEVk08q3X5KcmPlSBk6miSizBe97XBWYfIdx4SFByTAUu7CxUpy3o3qWsLxWw\nT4jIHUG1DEOx8IoyOF4bJj3P1RPe7DUDop3l8XbRFbau7ag7A/L9UawXE3mq\nfS7qkTI68ilZfQwBzApu8+yTmubhoSgyZLg/rZvP63dRvFDdIweB6D9Tn0oo\nSQD9xK3ezfV58eiSkEU3QCzUmb87I1jxcfqituTOG17mLIJXGzAJz9p6N4Xf\nDKR8g+eucfBIlZVNbmXJE2f1FNw4h0nngLQfX904V9yJyhOHLIPPTPLnyQsq\nE270qiEz9Yqybg0/OQMytfiwbqKKDHs3BtWNQufJteFAA2H6KoINgD+dewTw\n9zGDKT8mk1pHyoswebdnked6FaUNiCy47AUdI2IypteUsw6AsFc2L6nj6kUu\ne788SVUk4J2vJRnTiWIs+pqyB5O/+5ynmHDS2AFeTOelj9tZR9EKpt8DOVAG\n+MKh4JnOGKzs5QuS0rnFwpVEjOjtBRScwfiysYzQ2nyULop+TI+2v8SYbQsq\nvm6oTpMn43LhwvLsReEuknUuPxSBcCRX1918sNaie4A7UX4R2L+E5WubTw31\nxCFR\r\n=Zq8s\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"75a21650ed581d84436b1fb10317a7926efaecc1","typings":"./src/index.d.ts","_npmUser":{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},"_npmVersion":"7.24.2","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"axios":"~0.24.0","redux":"^4.1.2","url-parse":"^1.4.3","decimal.js":"^10.0.1","@brandingbrand/fsnetwork":"11.18.1","react-native-permissions":"^2.2.2","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"11.18.1","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.18.1_1642103330450_0.9795862239347723","host":"s3://npm-registry-packages"}},"11.19.0":{"name":"@brandingbrand/fsengage","version":"11.19.0","license":"MIT","_id":"@brandingbrand/fsengage@11.19.0","maintainers":[{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"danyleikoserhii","email":"sergeydanyleuko@gmail.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"736d241aa53a6a980a74b2099362cbf0c6104594","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.19.0.tgz","fileCount":111,"integrity":"sha512-JGk9wd0ZKMbpT6fa60OltjfS34PjHdShlB8y8GWw4gBAKweBaX+Z2fY0bYgHRcxG8PrUtI2bwVNt5EXDZCCctw==","signatures":[{"sig":"MEUCIDAxJgMV5eA0FDaGmUJk32gcv5CZgtk+Mtyo21bXw+HIAiEAt6CN2FwSdDDrklQOwc3iIgV+8NLRaXOyK7ZSXBVLSsQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":276586,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh5wS0CRA9TVsSAnZWagAAPXAP/1A+ajWVqFQ9vAKhfVyI\nS1oDHPgO45gzN5yx/tZMsXdTeZ8dRW0JT1XpNlbEo6v2Z+wAuNMD8GI6Injh\nnp+5IY1Hah79skes7BmwaKeTdEmElhiEuiEdzQdsentmlUM/9aeM0BGcM8UK\nGg/j4ji/2sQoKtw2eOyyQMT5h2X5cnvnkx+c596k/Www5Fk3aAWuEyqKZ1zv\nMX7s3a7lp6KrrXt3QQsBMJElRWW0+0xLkj1LLcwMEdJMSUQ7eWcd4Yu0753U\nhKXVg7BnBwl5/issgnhE1Z/lDdh02BMFUyjKWRM0HaWmfwTbXGk9v6S0LGwr\nqfSAtdjrfvIU10fNDSJKwZftSSazLP8P2yTuBMiSYtMKk545VKLLsdPX/xFa\nTqhBA4gPo+qCtbp8iyb52T38zgPDQeqf2CO03bJnJkCK6H0xY+LJBt8L1o5n\nXaQiE/9w4Ep2kxhDxSTQlyX52HjwzTTi1PHB7tIJ0cjM8eG9U9YrUB6MDl9L\nna/nQ6pI5yrJcMrkH3P4jtwgUddNi9Gw25Cb2jXwg6uJAHNdgcVD2G2zE+6D\noEDgmyR7jywHeBmaWDEFkP0UgFyMC/fFcyInHBSHHWqFETvuXYWWZTnsxg0r\npEu3KYIIRRyAhQaXo0ITqxEFJOG3UZr6g8ddRjKnezVdTQhRsCgtW1BKpgbF\nlh9G\r\n=auYj\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"f016e308ad251eb8fd7cfb795a39cc6d2ee090b3","typings":"./src/index.d.ts","_npmUser":{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},"_npmVersion":"8.3.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"axios":"~0.24.0","redux":"^4.1.2","url-parse":"^1.4.3","decimal.js":"^10.0.1","@brandingbrand/fsnetwork":"11.19.0","react-native-permissions":"^2.2.2","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"11.19.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.19.0_1642529971844_0.3954945020750318","host":"s3://npm-registry-packages"}},"11.20.0":{"name":"@brandingbrand/fsengage","version":"11.20.0","license":"MIT","_id":"@brandingbrand/fsengage@11.20.0","maintainers":[{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"danyleikoserhii","email":"sergeydanyleuko@gmail.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"96cffe2cc42b703bc4efe69043d4dcc4edff642e","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.20.0.tgz","fileCount":108,"integrity":"sha512-S28DXNoC/QLgNidk/bRYrSuO/qzn5H4YhCvcP8iG/kU28mXw9cXL/bxHtpBBevVm441Bn2Wg4E2jpNcbVGAFdQ==","signatures":[{"sig":"MEUCIHo3X9Fa4DsW0be0bQmfYmSFFk6yKMqen8am1SjVTA5WAiEA25ZyaBSMRUfbD7zScYzHeAnLunhN8HPcZOa4nP2spTA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":258234,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh6JbrCRA9TVsSAnZWagAA1+kP/jtgFU2Cd/HuNc0q6KFN\nLfZ3ESayaMPLwXnB5phaWYUI7d9Rf4k/Hq90tUZgIifPIv9X7G7zCzXgMiFt\nXU7NWdMTLIYijrgLlMdY8EDGmAZfS6J0B5EtzHlmGSTyiprW71314vUlgYjo\n+RFHEtE/greDp8zVgogIs28NYLi9lxEeM3d8fROweEIkC4ThtD90RMGsx3uS\n5Oy6e0E6A1pVgdbxem39O7pEL+pfnCfUgoXkS5EJubI7nAjCIWnH6cRSooT/\nE3PuFsahKl+zdVB880H8V1MQakqqi9h5IRSqYq9miysWcGNpF47tBr/uWibv\nD/a67DFWlLMViW7D/hcLxitLmYWDwYKoGAuvhCdxe6zYDOCa2kIqNgVxYXi9\nHdc+obDuj6T1s8QGWDrPHzEfRf+ryz+CpjpCP8gAUMQF3yIyg7BNW/c1T8zF\nUSxy5A6IbosZXUMokJlkdwcMAstZK8uT+bI5EJwDSVGqWv1nePSKBGXKYNaX\nGsVSX34HxDCA0/gg2RRSEi6dmgNF+j1qDbZsQmj7PwsPmikocVZMAmqOL3U8\nsLiXSAZ2V2LC7GwWBzln3hKILuP5IrAZxc48bBh4T9DzJBk4+IZmwl4w/Grg\nLpNCJAr/eidNXV9SggOlIm8TbOBu2lZ6zJGbxsW5c14By+/4r+uBCLdz+PDJ\nmcxI\r\n=hfJ+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"284eadbcd360d2728695e4681280f3b7cabade4c","typings":"./src/index.d.ts","_npmUser":{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},"_npmVersion":"8.3.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"axios":"~0.24.0","redux":"^4.1.2","url-parse":"^1.4.3","decimal.js":"^10.0.1","@brandingbrand/fsnetwork":"11.20.0","react-native-permissions":"^2.2.2","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"11.20.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.20.0_1642632938939_0.40953964226771844","host":"s3://npm-registry-packages"}},"11.20.1":{"name":"@brandingbrand/fsengage","version":"11.20.1","license":"MIT","_id":"@brandingbrand/fsengage@11.20.1","maintainers":[{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"danyleikoserhii","email":"sergeydanyleuko@gmail.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"a66617ffd669a0090ae57befd8d88d8b4bea3413","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.20.1.tgz","fileCount":108,"integrity":"sha512-Dygswh4uo17qsw6J1dOkpO9WyMEzxxXF+mTK79u6szdVje8sAjpb4B8dXJBYonkheBWsWWOVDE3PMVhWjY8Ahw==","signatures":[{"sig":"MEQCIAElBoUAbW0LFk080Y8R7ap7wQ74Eh5pjtqdjwD3jknZAiA32xcszk17eGbIDBiXsp/bc5SdFTa6QFB8ddvBOMH+Yg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":258334,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh6KcjCRA9TVsSAnZWagAAxv0QAKFii5ZoCyHXDBOp+k5K\nB66SKBJkn2ByAhpSML1Yw2uxy8f3cQWADKrYZRb9k1Kyg9gYa0jWXA1hLxFi\nNp4Q6Xi8suVyG5KVmH8JhvmwJ8UH6rViNKCbgJzv3yv5EN9nD4qTnGth5jaP\nXcNFFQvBP93CiooVtpuvjuGY6K2o6d5lzjZG3pZ7HKMg916895x/iOGtLLPR\nf1kUYSqJGMaLH/cgzdEnKLjr5hyMPUNdNNoYMatzkYesK0JbxjBgKN+P/GEU\nwet4Dq6akJwn52/OY8BdnoKEM9+yW8LBqeg7y8PlPbalbNpH37a9K2IeWP20\nqIdpmi5HaDhMvmKmbDm9MhKEGQaZ6hq3JwAbMtsbQItt6OM0AdmgPmFyBktc\nSW3KTFFEiu2BahwL2SrvnKTqFMg4GAFJkPf4rz4DOzSzBLv6769qRNoHx8bv\nfR/4hx4P8wzJtMs63t7aKUdVsYDIuq7woUx72GbfoIThXyBrjlZeYdS9/vy6\nPIAQFXP19fdZIRTXVcP7PqJ+Yh5P6a9o2Sf3rn9N2O5stzc1DbpjVBXaq+7J\nlORL1NI7nwWRGGD9/+bZ+PmQbuWTczv9C2SsrsiM+k3yckfhxkh99IaVWpvB\nY05j1FngpeS2+65nl+ybxJ8tP/S3uScscLCvXbRS5HKHfFdhD6K2d/NnbOW0\ns/+0\r\n=Z3+G\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"99fc475ce3f4a9e8676f63e658eaf5a512ef75a3","typings":"./src/index.d.ts","_npmUser":{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},"_npmVersion":"8.3.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"axios":"~0.24.0","redux":"^4.1.2","url-parse":"^1.4.3","decimal.js":"^10.0.1","@brandingbrand/fsnetwork":"11.20.1","react-native-permissions":"^2.2.2","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"11.20.1","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.20.1_1642637091265_0.6487730467279418","host":"s3://npm-registry-packages"}},"11.20.2":{"name":"@brandingbrand/fsengage","version":"11.20.2","license":"MIT","_id":"@brandingbrand/fsengage@11.20.2","maintainers":[{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"danyleikoserhii","email":"sergeydanyleuko@gmail.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"84c61c0d1ae350d511e17826aaf7e0fd5908568a","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.20.2.tgz","fileCount":108,"integrity":"sha512-fjPpJj+eNW+PD1Yvw/xPJKjg5fW6orS46Y+WA0ISweGy/Vv3Nyq1s5V7gyiO68z1z5YLgdTQ+hlaIE6s0oPr3A==","signatures":[{"sig":"MEQCIFpNl4AhJLVSiiQK7hzhBsmlQEIgIaG1ksJw61lnFWB1AiA5xqlDBqhBM5Us2qnpyrVE6qKl6QpCg87GbCOiwHhjcg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":258434,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh6LA3CRA9TVsSAnZWagAAMjoP/3RYWxQ8BQx1cyEvwI95\nh0Aa+SumjGkR652SIM2B8q32P0RkwuDg3198qpZjFfcvY+Piyz9fzzVQC3Pp\nlGW3w7NR8dM2R3rsz36MTdpEVjmizO7autqUwkJMV2EQhp8tszMYo/PNT2iy\nRRKSo4hbVsiAA9BcUipcNS7pCF9bFumFTsVQ2kSwkfy+uAnBBe3K1+9RlYaU\nk3yHz7aNRFNpsBCSpnFwpvIbLW3p8ExXtnJIYTuYbOvKf6jQqPzek+d0oKZD\nKeQniKLzPGQLMfQT46155Qng6Eq39H1vsB2jVjSr+5qR2jX3Z1hR5Cw4sjD+\nHnYLlXyaR4h8vu1pHnvdExI8lA9eLiZXpBQsLT2+gpqHNPsLQeWuNP4CUwqY\nA86dMWEzVdLjbTmzvN4SssPp3pvScynfA97lGYEgoB/gVtKuVd9xV370sD9Q\n9n9Jm5LhPGARijLKKKi9FPZVaFzdNuZrv2IlMfQXTRraAu47YRwKAFktN7Tw\nqoOBXeaTu5kVjTN2nLPasHjzZ+f8TKzTcErxjXUtmpPG0N+Cu/7F/C4zWR66\nkirN6PBxYS4yTSXQJVnLuGQozHzXtsFCK6htsHHtP9JTHPH5YKBlHlU58zmy\nM7qwRkLGMJ7twcSUasD1ahzj7xihY4trZHlY7fx94draWiX+9PHo8JdOgTvE\n9AOr\r\n=+zp9\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"c6e8961bcf1384d4324ee75e7b6e4b6346ee14e7","typings":"./src/index.d.ts","_npmUser":{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},"_npmVersion":"8.3.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"axios":"~0.24.0","redux":"^4.1.2","url-parse":"^1.4.3","decimal.js":"^10.0.1","@brandingbrand/fsnetwork":"11.20.2","react-native-permissions":"^2.2.2","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"11.20.2","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.20.2_1642639415358_0.6989561344132371","host":"s3://npm-registry-packages"}},"11.21.0":{"name":"@brandingbrand/fsengage","version":"11.21.0","license":"MIT","_id":"@brandingbrand/fsengage@11.21.0","maintainers":[{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"danyleikoserhii","email":"sergeydanyleuko@gmail.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"bad074b1f4454ee2559ef45a936daf62a6a67ddf","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.21.0.tgz","fileCount":108,"integrity":"sha512-pwOUeVDQWZDX2hMFP6nUBPBDWwXhIxvbmwje22Yn/thkxoGNsQLmWinO2NS9YcbS7nBY8il2F4dFUqZO6PIxSg==","signatures":[{"sig":"MEYCIQDxA3s/JbgTI/zjO4wV2sFCQ5w1tCOmyhRrouAWwKGjxQIhAOkssVk0rDfdmhMWub+obKcTcgIWEMesyp+RsB/GdGV9","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":258304,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh6zW+CRA9TVsSAnZWagAACn0P/3IXaHJBxK1LW64aYeRe\nLWC/9XKZmzZfTJ/iG62B3/CAqKm3ssRsR8bU2hava6LS+tbwQwXlX8gQjNyE\nu+bMQ4jfQKTYeIaRacTa2wrtmrKYYI3EHPptA5/8WLvgb53lEYhUOCjfRici\nFoYji+jr1K7+GFX/FnGZUGZ7nZvxJBF8n7Lq+DLLF1gGUHm+fvrulerSBbKe\nlPvciaK9NOWfgDCcosIkg6wXV4Nq3x2ShR9KiyXsly+uuQ62LommPNUwBQkU\n+zjZ6LGB8stIc3ruGmY7duGkdgYT83PQ8CpLCgq7CuQCSpWCoiNquwoATHPS\n0MacbmNeciOUifpaFJ5hUr3dIrc/N7NadfbtgZCyucb3+I3biPqt+wTyUXPF\nEf2Zy+zy6p26ivGdPtnZ+SelXo49YJIQ4tSDtm/rXQvj08NRSLwJ5g6KBIbI\n2VWXPa9w67J0G355VG8lGNDoVSfPxngH4qJw7RM9pF/sgh/MMY+qkIWPRl94\n72Gv8SGjXftwpHERyzQeMQ94I24TEVy12WPFzX5vs0yv29JaL8XDHqo/GuhV\n7BGkZjx8DIsnZQdwd8mdFXbRUJ7RT7YrY2SSA4850Y3b6qMwPAsBrr4ZwbhV\neOQ49lmC13SmY8sKKnt/NP37Pz3hQ/56e/uVh+Nb4Hye0fG7rlJx82te2g/6\ndmIS\r\n=QMwB\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"040fb23d7af3b983abaf4fad42656e85eb4c45ee","typings":"./src/index.d.ts","_npmUser":{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},"_npmVersion":"8.3.2","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"axios":"~0.24.0","react":"^16.14.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.21.0","react-native-permissions":"^2.2.2","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.21.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.21.0_1642804670110_0.17393850760291363","host":"s3://npm-registry-packages"}},"11.22.0":{"name":"@brandingbrand/fsengage","version":"11.22.0","license":"MIT","_id":"@brandingbrand/fsengage@11.22.0","maintainers":[{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"danyleikoserhii","email":"sergeydanyleuko@gmail.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"tim.matyas","email":"tim.matyas@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"5d82c7f42accd2baf7cb9a9b1ebecf1f17166c28","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.22.0.tgz","fileCount":108,"integrity":"sha512-95mkZRPXObw44DcXBmwO8+lE0WK/c+wR0ILFUtR8nOXC54atoIGBqbm+tBx5JmsOjl4W5FENgpKx8M5gfJSZQg==","signatures":[{"sig":"MEUCIQCRFEdpbHfhxxDQls7yDMGzW7OAGETeEGPEu/5SUjWlPgIgGrkdJXHbhuknv19qxyOozx3CbD6/jrwtSy5x4Hfm/64=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":258403,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh8xUMCRA9TVsSAnZWagAAfzgP/RUxPTxAyPiBRIrI3vQz\nAnKZVVBtQx0TCINtVn/N6ttfPySxqEdV9DmRYTHOjWZ1HZ+9ilyEPY2gJMVC\nVTG81SqrfqNOXHVIF+1QevOgfGnAEvxuYLSOixLT+dDqZriVB9y7Z4DGTBr+\nHXMN7Sbn+NUhTxbyn49/chZ3QhG/ZmOa9noOSYq2G2nVylqyDTSbvsQIeQON\nlmjB5fj/wiLhP8kQ5jEx/MH7iOWZ5yWH1aAn7Z7WOWkCaW3lvyqyKgWCT8pb\nShXSFiiVfW0SH99isT3WesHTp0uzaXVnZ6ZXkGL6UjP2VTN2IVe0H8jlTDkx\n49XSBQMcHYmImd3SYbmYLYd9znQXqzc8BWK3Qr/H2Y0v/GEGINcNJLbm04zK\nvtjhBwD+u7tIA0kxmUYsDRDunFY95WYV8/6B4jWcPgkVUJ9HWdX9GhZ1e2IB\nPBu7eJYNnWHnZm+Vm/Ddi4OMD0IYEfZVsOsPZj8pEFNoe3joQKHs2qsH5Hul\n8WQmJ7m3tCWMCCxdMX+XmsgHXmFHvWsnLA8RSwabydSfyIWUyxgXE4MCnJak\nK0KPjDr/dKZ682GCcwwRO/HJN192rSG7FWTPWOS7S4AUYRWSkuaq9oZtEDeD\n4xrY7wi4v6NN3pbgLC1Yk+RFBDj1GCqj5undXdC4GRWrmPlIZhegcC6KI6QW\n3/W7\r\n=siMT\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"11b881e723275ec9e158bd11e1fc2ad31a739ac6","typings":"./src/index.d.ts","_npmUser":{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},"_npmVersion":"8.3.2","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"axios":"~0.24.0","react":"^16.14.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.22.0","react-native-permissions":"^2.2.2","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.22.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.22.0_1643320587753_0.6567508478142523","host":"s3://npm-registry-packages"}},"11.23.0":{"name":"@brandingbrand/fsengage","version":"11.23.0","license":"MIT","_id":"@brandingbrand/fsengage@11.23.0","maintainers":[{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"danyleikoserhii","email":"sergeydanyleuko@gmail.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"caleb.griffith","email":"caleb.griffith@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"953d60a625cd3a4d21124a29213215ff8d8d151f","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.23.0.tgz","fileCount":108,"integrity":"sha512-Sg/LndYivVkdIpdCjO4h3FvSyrxwYRQoSdt69Iy7qMEGS/B6CEHQw4FwH6jC/X7EafmINH2ZolHkpJ8J4P5HJA==","signatures":[{"sig":"MEUCIGy/ln5uz1+7GSNTVfzAPicFdD7TytfKOOVIEiJzPwMNAiEA2d+sljyeN8JC43YrZBJl+Yi0+5VV1HAAo92ug+n6RwE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":258502,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh+B1QCRA9TVsSAnZWagAArIUP/RelojaP6cQ8PP/NGDRj\ntZ6tOTWiWn48cqeFD0thzGJj/PMoHrGw9ku3LVTIs5Hwb1QtBSl8t+d+UQu3\nMkbBN+fGULnRQjSL4Qd3Y1mXmyPCQdTgPibT9LwmBExoU2icAYLE7mNr1XIc\nYwoZLaiqmKx9wxWxCggp5p9egcsQZXlA4PCnpUmtRookixJgWG4ilIus30u5\neOSHCDRPT7RaaqTpnWoPnifx4souh05CJrl5wRWTSfWxGnEl/6iH0xypnR7U\n02j5B2idNyISH6qWF4q+1AXT19j0hC1k0x5Odn8z/ijfXgtLjSPxzPAvMgY2\nUMOqbuI/plsvARCP6FZugBNmlwjVsmObzWQXWJOe2TTskD+cpLrlKMblMe8u\nAk1UyFjaWs9wgF2yUSZSvP9PGhLH3tc/Wdn3aJPOeD3qlHAwS46/X4MCjKdw\nTPQ2I7bBPjPVyHXCUWZ/SyADqmgR8lqN2SaHE6ECswHPDABe9EreoHoXkMuo\noRYnKRU8xFLv8Sofdgp3G2u5bQUuAiGTndnjKUFgkx2fRLKam1I3PaSJuDv0\nDWD+F5ytAXnl9zoIleHxpdTK05ej4l3rcuMVWuouukwl1b1UMvHwAADf0jzM\ndJSPM7OHgDRUywBJyAYylQp95RA8r9XXZkyPIbmM5SuwbJawrBcoJoQlP9wP\ngXhQ\r\n=aFEJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"739d5577a234a53ca6c21cd164b7882f5e7e5558","typings":"./src/index.d.ts","_npmUser":{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},"_npmVersion":"8.4.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"axios":"~0.24.0","react":"^16.14.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.23.0","react-native-permissions":"^2.2.2","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.23.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.23.0_1643650383858_0.8264264124976488","host":"s3://npm-registry-packages"}},"11.24.0":{"name":"@brandingbrand/fsengage","version":"11.24.0","license":"MIT","_id":"@brandingbrand/fsengage@11.24.0","maintainers":[{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"danyleikoserhii","email":"sergeydanyleuko@gmail.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"fd7070673abc37f9e49ae0b79e49d59845690845","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.24.0.tgz","fileCount":108,"integrity":"sha512-apftF24YJc5KZET3I6/I/AqIBc1fODk0Fel2J1nEenP09cLfABHb9Wdw6jCNp9/uAXQ9d2cu0f4/mdJCoPhoIQ==","signatures":[{"sig":"MEQCIHd4iZdqQGf1CFn37n3u0F13ED+VJNUnxUdylpIuWIDzAiB+QtlrE+Y1FIpE3FFwX5wLbyzodFR/Gu/SIolDxnRRhg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":258601,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh/cQBCRA9TVsSAnZWagAA5UMP/AmCrnbaV0l6VJroICB7\ncrWLEaWT4MkIwA+3bf2q8oCyQzLdZV8GPnxTxcXRwaQG7sO59sNuyE+cxoVl\nf3AY35ln6Rn2f8pQTEXAVoB0zHp1qQ5z0rpdK7w/g4GiDgE6ECc60qKC/k/J\nB9adiT5oLGkXvcTUdLk1GfMyPQoUzisRmicCTl2PHUTlEKs3L6/aKpgtR/nQ\nHQz6DdHvVjOMm3ITBBRnBI6IJKTFgOuFJ8ehUuD5uGyJ6uL9kHrHvIxsof/u\n524uOg0lvhKbAJrEMBMzrtK1vNy+k1nPNyFo30tBijcwfgRwb5KT1Eqyi7Ww\nVFRRZKRjqetHUlFmsM8Dmq7JrBYc8Fo3Mq+4kJTy/7sKjfmADcbw/se4ngvW\n49CDA6dW7yeXj2kt/Vr5PgnqWjBTpe+AmqppBvlv2AslC1t9BBAcz/lvC9Qv\njsdFsjNy5XLMKdmGoSqlwyF4Sd5vNu4VUUrxZLmzY4TJpEsKmSh19hGzatiO\nc7wYF3r67lbI/wiK6Seapqgz2Cwtduu33plB30ADBjyoCUpWh5E0ceTid0Us\n0BfgFkfWUAPRd/XslUntgm1aYxlLIm4bF9hYhzpu8rLyH9DuuH+i+XIoej0P\n9aq+2oZZHZ2UHP/7985RZtj5BAs40VC+SKUy0lS6/iFSHmHQPYyAl4CFKCyq\nz1/k\r\n=LWoB\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"0207fe4d34a49c43d76ddce0d65bb67cedb82716","typings":"./src/index.d.ts","_npmUser":{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},"_npmVersion":"8.4.0","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.3","dependencies":{"axios":"~0.24.0","react":"^16.14.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.24.0","react-native-permissions":"^2.2.2","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.24.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.24.0_1644020737500_0.6683158461294039","host":"s3://npm-registry-packages"}},"11.25.0":{"name":"@brandingbrand/fsengage","version":"11.25.0","license":"MIT","_id":"@brandingbrand/fsengage@11.25.0","maintainers":[{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"danyleikoserhii","email":"sergeydanyleuko@gmail.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"746d0f2e23d06d7f0904d8bf3fa42b3ec6b88411","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.25.0.tgz","fileCount":108,"integrity":"sha512-1MeCsJsIScJq2x2M0ZpCsDa6r+iSQq04HVUn9oKfvxB6K571nB6q4wSgxmiIgiEyQHE9ao/FH6nR4yWF2YukhA==","signatures":[{"sig":"MEUCIQDT1+ZYNoqhFrUVDtBH7rGt/laCTLzBcyFRacHalfzkwAIgcCNWK420d4NLFtTCtrLr0y72Qu7OR9bgp+OZD2uUc9g=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":258700,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiApdnCRA9TVsSAnZWagAAPmEQAIAABDnsWbPSqWC2qY18\nYDiVlJy5r6K4pGape6g7uWajcJlZifNiXdEcddJW3ARe/WK+atgh6WhUnGSo\nzCUQPrkIJ/7WQbZ60newityqRy6S1EdBy2wZ7qI42pWX0NR2fk/qcd8FJv9B\n59IKlrxLCcMHqqgdpdWirJuQoAE3lz9wCj0co88lfdsAZcs40AGT/og3CeEN\nAz+UGQm27C3Fup51lSihNkIRZuz/tBcvyNuAWBepO71loz686KuEeF2poxkj\nTsVj/9tqKSQFGOkp2fTF0tce/NmuYSOXyO5OOt5hLA3QUsonacoYvUagSZm3\n6S0mToY8aJjJ3lkTfc0IeDtLI0LHk9xrfG3e1uivyKJq68xyVRBN/PA79zlW\nvX19XnVB5r/YRRxhofbqrSKGO7Cv9mxDWiQ1Z7HjYZ75aZFkZY/484U48wTR\nfQmRU3bn8sexKHq30CyHWbEtNorvrK18p1oMkF0XH/j170x8iAOHiUXaFfQE\nurnAVhBBXxu/IuA3v7roKFfTf+iaNDfgHlEFAlm9KTXdoqvCoP0zHm+tbeMJ\nNAqYQxgdtdXnWuIM9kASXVmQ8Vecoiq3xkNVc0IBIpFGYF+gRpjslpMk4z/p\nI3p+xM1faTzwOPD66zOh9+THEhBGDaYtE3KAFXzI/JoL1UC3BnAiMN9oWIsj\nd5bR\r\n=NRiE\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"d3b7a6b771a0fadff3252e38b4aa2112e1d70124","typings":"./src/index.d.ts","_npmUser":{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},"_npmVersion":"8.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"axios":"~0.24.0","react":"^16.14.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.25.0","react-native-permissions":"^2.2.2","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.25.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.25.0_1644336999042_0.15625785659396163","host":"s3://npm-registry-packages"}},"11.25.1":{"name":"@brandingbrand/fsengage","version":"11.25.1","license":"MIT","_id":"@brandingbrand/fsengage@11.25.1","maintainers":[{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"danyleikoserhii","email":"sergeydanyleuko@gmail.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"b9d9e12d4f8205cf48301f6a4ae99f04a9ce86b3","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.25.1.tgz","fileCount":108,"integrity":"sha512-WekoUjvH6V/tsOMdWv59rWhqfBZL/XgEWpwWNaU3DYeX+L0i50BNxFd0y6sEjVKd5Te6DnfdvkorSILhms2lmg==","signatures":[{"sig":"MEUCIQCXCVdyPkrInRnmcGYecaqTs/H0IbRwznTKlghJrIhzUAIgBKboY4nnRVd/PP3w+sHqAnFwJegnLrat39hsDNfKsfg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":258800,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiBDmKCRA9TVsSAnZWagAAkdMP/j+z3XKSXzOWKCfN4pTv\n0CxxdRk8bQU0hx4A85AOFrVLmXfJhXWgRTP/CRP+RObra6Nd448keDC8+97y\nQA1b669u5X+h3HODC56sCLPsb9j8Q7xZUhwQqT30lBoxJxSl+ml1thrIg6+F\nWZYCEpoJPB0BflyNsd81XAsYrLpBJqZY5JBd1LKF5L50bWwrEYO3WMhYXVLv\nf7tPFQWkdvmnJgKcl2ciry+fzLYmRIIHHIvgSML11S0GTzcvmOKLi0V81aH+\nZ+zW4CdkNhHc2RvsocXsHOEzwLA790lCwPJzkr5gY+V7yv188UBVmNlfn1bx\nDxzCAphBOI8i5a+TYNjzJEa84CAWlkAc+wqKa6fo0f6Pu0RXgUiIw86RA9xS\npxcvwxTu9Eyw6VJE4NGCbhTso636T3ydXv0sqPqup7tyEjdNuiRAd9itMPZD\nsyUmssSDAxANHWJb/W5XPTcdbLTfLrI0TnP7ZIWZVrDlh4kR5uOEtF1jjPTq\nwGSDVbbsaUfryRuSSDwQx2FekkaX/S30AVNapR/YYg+DjhtzOOvanvGrOxRf\nN0ZgZ5BhntbiF67+DtBBLRrVUgx3msmOz+Agx1GRlOjtvSGszW45d+gAXo3b\nXJV7U2/9izffw1zgphsGZNHsmrKcrelCRQBxG98xiqtm8Iwc2+cHlGltkYEA\nrJXT\r\n=fV7k\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"bebedaf5eb93e0c78716aa59b5a2845df7544ec4","typings":"./src/index.d.ts","_npmUser":{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},"_npmVersion":"8.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"axios":"~0.24.0","react":"^16.14.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.25.1","react-native-permissions":"^2.2.2","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.25.1","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.25.1_1644444042812_0.1998782692165726","host":"s3://npm-registry-packages"}},"11.26.0":{"name":"@brandingbrand/fsengage","version":"11.26.0","license":"MIT","_id":"@brandingbrand/fsengage@11.26.0","maintainers":[{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"danyleikoserhii","email":"sergeydanyleuko@gmail.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"b0fe4cb62806f0330bb6f41a77728c50820e8dd4","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.26.0.tgz","fileCount":108,"integrity":"sha512-h7iC4WDg0GVGDNGDQnGcEA/liPBwOeeJ3Gl6IKolmzY3/CFlBjdNo1D8fH2IQJ8Q3NiUaJctMie4ByDHDFEHDw==","signatures":[{"sig":"MEYCIQCRnliO7hj0bpFdngV/OqucA9BBzR5GfbFBtRTzKz3FsQIhAO8tHhWtOaD6sd1hltCR9gnJogTlj4UTnoyMxghDtKG4","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":258899,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiBX3CCRA9TVsSAnZWagAAfZcP/iING6nB3/IV2LUAzx3G\nApAaSKiDNV4hB1W9CRgzuBiFVfb3b5dAjs+hSAlskIHIMp2z1mtGuj+fhFTS\nmD/ZmagnekNImBSwCjWu3nwd+dGSpp8AEfNeRH5y7O/nUYHwjASQYrHO1mZD\niavXVjhT4RcYB2Jc3yP4jEmgqftiqc4KjkQByeo2z6fDK1sI4jlzDpFP8SLp\nToAEMR6Pf+giKaOqWreGiY5gEFYqJFKhM4hEMtM4biwDxpodJoUSqsJWeMH8\nUNWEED+Xum5h5UIdrz59oTQqvkWPr9lN1+jswhLlCs2rijpXmLecCWNa5/4z\nsfJMGjk7E5M/7x2djoc0gpKD7Yz6jXhjZ7srwN+R8otlD7JuEPdVH8tuEKVS\n/UcGWT5hM2sbUtBbT7Ph5zBKilNDhzhHvFijpbpWfFLA6QMczj8rhWbL90Z4\n+aVU1bBlwzVSnqmwo77fR/xgjIJGUytCXFdxkcK9H4jd/7Il04h4CH9uLAln\nhbj5pIIDYst6M6HvQ40voj92UXwJ/jm9YjTTAzPOyipTA8PAWIAoaTDWysFJ\nBZf5Ru72AdZi+7xGjrantKHgQ6oSEloj+siC30oW1maTMId+kdnJmCs5n0Y2\nadCRWtZwhnvOb8DHEhE0Tp93mw/0fZgO+xHKBCpF3EbcufEhmRITELC4g4ow\nJQ+H\r\n=eu0J\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"8b984dd00ff1737a009969df71d80f9f804ad92b","typings":"./src/index.d.ts","_npmUser":{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},"_npmVersion":"8.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"axios":"~0.24.0","react":"^16.14.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.26.0","react-native-permissions":"^2.2.2","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.26.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.26.0_1644527042664_0.1899789130605123","host":"s3://npm-registry-packages"}},"11.26.1":{"name":"@brandingbrand/fsengage","version":"11.26.1","license":"MIT","_id":"@brandingbrand/fsengage@11.26.1","maintainers":[{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"danyleikoserhii","email":"sergeydanyleuko@gmail.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"0cec76ea7872ac395ad6e61eabab0c8881258ea1","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.26.1.tgz","fileCount":108,"integrity":"sha512-mDoo7+yhXpQSPEsLFDx+pRt73LHbw8GEo7T/2kA+K/c3Hwgde4hGhnhePjrGoXv682zX0s+mZ3f+NTPIztdq0g==","signatures":[{"sig":"MEUCIQCo6Pz8puLDZk52wyfYZsslC3g9yrmXvpPUGKZyvFFZvwIgGDkoam0bbIwYI8ChsDL1IisXoIMM8uMQeUhdXfuWEBk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":258999,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiBr25CRA9TVsSAnZWagAAzWIP/3vuq4iyvvaa+iuqB3bn\nC6zjaijupsuAsk1zUTuMX4LEz6KYTeo1ijtv7mUqHs2RWvU3cevCDesOFCrA\nEbvF9/iR7aZ0aZ5UfEpfKUF47MbzxAyjoq2HJrL8f9RoEW0BfxTT6qL7K9z/\n5MshofYKS+J1Tm7IWpBIh35J3+YbsnEQfJuGa/FwhMN+F+P5n0pIZtQMXgCR\ncq59hTLSFkMeT4Lu8FeEXDeMntJM9xA1l4gS3lehXIZKuxpvHTWotcWphFZT\nW3lET5txd4QF/BLAhkJyWVOoxRW8VdALYWPH0kjcsREh+vukZpdF0wp3D5b0\njGvmT9/3OcW9uZ4w3jL8oqdxce95pFGujbE4lHIe1KnSRMOElWDRcZR3J7t5\nlUti77qQzmlU3NpFiGn/bZ00LfM+PTmTMISMQxD76YuSh46U0v/6NAnv2wCo\nCSBkvXgZI9CMQzk8vGlmCzWOx2O98kYA7dMlLmv+PvOsBa0IRMuRXPp95vWd\nNlKTtcFyVddmKWYU2f8afaPcYX0rZ3Llk+533HjO5qqNEvWxjwNTHne2p6Qf\nlQwRu3PUVxtSaLj/BUeW6JnAXrYFc4g7jyjlXdgeryauKDGL+tSeDO4HXsUW\ndY55t0KJ73GALeSM8vPogfiuR4Rkc63iM4TMGpc3IakMIatKUdAihrkJsOay\nC8/v\r\n=FTXY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"5b7b9a440e58319176c1a77a557f600cc93ffc35","typings":"./src/index.d.ts","_npmUser":{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},"_npmVersion":"8.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"axios":"~0.24.0","react":"^16.14.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.26.1","react-native-permissions":"^2.2.2","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.26.1","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.26.1_1644608952987_0.7652562699190739","host":"s3://npm-registry-packages"}},"11.27.0":{"name":"@brandingbrand/fsengage","version":"11.27.0","license":"MIT","_id":"@brandingbrand/fsengage@11.27.0","maintainers":[{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"danyleikoserhii","email":"sergeydanyleuko@gmail.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"32cbd7f3e8fe4316c8c5ee3845cf4ae69719862a","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.27.0.tgz","fileCount":108,"integrity":"sha512-KjYyB1j76xX5lEGYd9Q/OUIxS0kvZXVRNm3fvKByLBgzDvXGrhQAM2AHa7em30zXlpFM5TcGRggzm80kiatf1w==","signatures":[{"sig":"MEQCIDOJhGlsvWU1GPprtKf27QXoZok8fsgc5WWGHgaFfiaLAiBdNgIhMB2EGOQrfzAJjSz595IJEyCaIuz+2YvSfRuhIg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":259098,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiCuUsCRA9TVsSAnZWagAApewP/A9UchstV0SJY5YRTRYb\neylltL1AUH+uRszUTX20/kSNc71cY+Yjw8IskS8Ga83mcYc05y9Luf0SClow\n6snLdvpNXL3Z8LxePh4swJkKaG3K5gags82UbXJPCSqpbbDLp8d4vIaXW2zX\nLf05EN2qnfWYLYC7mSYtAn792CniY5vsokUAGF81nvoXUTbi67c1aw3n4SkR\nSs5+YungJnXCWC73EYJkV+SxI/4qpHkuGuAjOMf/r+J4XP9PIrCn9XBR6A5W\nCUGEqmxn0SSaiV3UdYCP1MT7X8uG1rnUpuCdmiNV09gXkQvvouMsxSFuUQiB\ntieM8vuPXsnwDE1j5PE5EsluBSlZBsADDzQEFc6oNrMnj3piW74IgFEpQAPK\nsxJXyt15hCKR6fUsZ1lqYMAoYmfSkexlmAo7g4IOPvwxA2A2rxGFhogMimfY\nxk8+PPiILjGeJ2UjDfTxVlnye+nx60rXFBj2lpM7Ha/7XXwf+DwYj7XhaS0c\nAyLp01lq07U1WnYmrliQRt2dG8cMOYwySsyymah81UqJDObzIIa7hBKwuKZI\nardf0sNkfeQWzaMRnAMxlxBNSNaK26mQdUnIgUynEudaJMDLvFJHthHnfD+x\nm9g79YEQWJKo48vpoIbTVc2rr2JiTgd3TQKG/KWHfjwG0QpMjF4kR/nomSbZ\n1PBH\r\n=Yg0B\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"d88334ffbec0f905aeff3962939f7813454660d4","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"7.24.2","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"axios":"~0.24.0","react":"^16.14.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.27.0","react-native-permissions":"^2.2.2","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.27.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.27.0_1644881196566_0.6355521831080697","host":"s3://npm-registry-packages"}},"11.28.0":{"name":"@brandingbrand/fsengage","version":"11.28.0","license":"MIT","_id":"@brandingbrand/fsengage@11.28.0","maintainers":[{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"danyleikoserhii","email":"sergeydanyleuko@gmail.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"3a9bfe554734f44f617f26a6edf3cb8f3723c274","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.28.0.tgz","fileCount":108,"integrity":"sha512-/tpJ/pbS10OxmXd3vvmq2vC6WmSeieyrylKu+p3H0C9c16T+d0LDEZY/ebPNE5uF/4nG1ZbfO4Taqa4i9ouoYQ==","signatures":[{"sig":"MEYCIQCQ1cewAPdJ7ifBQZR6Nld0twVSU2A1cofz/hQ85CrtbwIhAIJdb8PnAUpKvz2TXe6Fzl/83ZZ1Z0Tz/MlMebs+BN5k","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":259197,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiDCudCRA9TVsSAnZWagAAhHsQAJmSAzB9El3QzIV+b3F8\nvblSOhR4DWovLh4tCYi09YXi+O9DsVMa/wCPuc5xwVjqE0HBYrEp8huezrfS\nENU3NwacKC2SQUgKNzyY5Aega6iM0XvoEH1OrtvCAgBL2Mug96iLILJaLpSt\nq5vJEMjSI7HUXx8d/yg3atTElmdukhLCv2zBQqF/TXD1ry0K+6H/tPWDYoA1\ns1M6e8+I5AQfE0b9bvwhPQViDjPel4wnUVIWJUzqzpYOSha7D4ogrJ6aXt6u\nbuleCdhpevEpqylEZqyCOPp2oDGHipUsNghHNOJjuCymVw6gelCxrixz3GCB\n9KRhotFFolWxKOqWG80S54gzw6CB967dzCbdxPQBZhFHv83RK+1hWNwSlTo7\nB2bRfkhTwvcUAtmtCcRiiq8eY51USn2SKJu0Nn6YM2gZ52aRb4IlKCRz7M5K\nnsk6gmo9yWmYZxCQJ8aTN5YDUipXKJNt9plv5RnsaOfkNc52/fYkE7VNhVxY\nMychT381BADN38nZsoXajJFY/SjIhUqMDWCOKEKRq+Rf4kDjFq+GpXzwiMit\nPrERf34rfDtmugPTfm5+5S6XYA3cNeU0rtS2DbI2Qxk6zN9gtU1FQVQq0VKn\nlZceWJXFhaSRjXPIxJvyTK6ByawXSnZoYNO3L8n1wS2yomddxUFqUqfVEiSu\nmdQc\r\n=n4di\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"72237a8e7f0021176f47511437634035d5149bc7","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"7.24.2","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"axios":"~0.24.0","react":"^16.14.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.28.0","react-native-permissions":"^2.2.2","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.28.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.28.0_1644964765407_0.919289155215903","host":"s3://npm-registry-packages"}},"11.29.0":{"name":"@brandingbrand/fsengage","version":"11.29.0","license":"MIT","_id":"@brandingbrand/fsengage@11.29.0","maintainers":[{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"danyleikoserhii","email":"sergeydanyleuko@gmail.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"60cfab2b416c04de9e08e521476d85663a1647d3","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.29.0.tgz","fileCount":108,"integrity":"sha512-yBvf4WmomzPzHiy0h1IO3xaGKgnrvcu7U7SPp6M772MGT2ZxbhsnvUt4A5YF5Jsoxx0VPEWQZ4z0e5tDyn0wDg==","signatures":[{"sig":"MEQCIEGeeVeIkoMnDIqTI3Iftv2N3FvI+mXCOcHzVmbFKR8uAiAgaQ42WR7NQTeRqQH6Zn9zIAPvqwoM2GiVW1W4Q/wV5Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":259296,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJiDXkOCRA9TVsSAnZWagAAeBQP/0Hn+gUl64WxKSsnO4l/\n4uWeNys/bTkOB9z28XwNLM8llVF7ykJwVjLlFmEO3X1ofZBrrPhSJgIj8SFS\nM5hkh6dAGUX/RPpfMbcG5Spq1kUbfgP9mfT/cV9Myr+LiGwTM3nYaR4K1A0T\nwByb9O7nq1UA4Qs2aOHeC2ytHY8J364bsTYsiA9pxLySrUhCIuzpsVwkHn64\nFi4UB+U5l9eNy6/UBcUHIZLHzZ22QZXI2qIBi4WftmsgiPiOslbV47xzdN2Y\nuLQ0GkHQpHwVCsKhE9X+8xzDQcNXKVMonx5fpYzcGPRpNo2YVujs64eB83mk\nGs71cZwFLkGBITYQmYG3/kdpCvzVOzrNq6iR69mrWofTsaeqA+itOEBJc4I9\n844P4qTNzP/4nf/tAbUdWi8DswSePtikEacKLo4UFd8VEFzERhWptFCcSPW5\nB6Vwe94eQbVmiAy5ZBRMHCsVXGlwk3i4idZttPdXOqaJKtKSOvTYAzC0AtfI\n9OJK7nhPq1cAGqgxkYZvULSMKJDym59oZ6WoNwNSmr1Ed9n+bByk2ebRK/iV\nDmuhgp0d3GOu0McxUROBX5xt6t+ECk42I+uBpGSx8zrMnqIQ3kuMzh0Ka7q2\nP+G6PFYGs0vQcQmw6iVBnf1Tz1qAksxGPtZ5KJoMqOwhspPUod8jcqjVIWEB\nqpgp\r\n=L7Ji\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"ca4244347ad9d3afa563303c6c9ff97d43eb5d06","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"7.24.2","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"axios":"~0.24.0","react":"^16.14.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.29.0","react-native-permissions":"^2.2.2","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.29.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.29.0_1645050126285_0.45517006590489695","host":"s3://npm-registry-packages"}},"11.30.0":{"name":"@brandingbrand/fsengage","version":"11.30.0","license":"MIT","_id":"@brandingbrand/fsengage@11.30.0","maintainers":[{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"danyleikoserhii","email":"sergeydanyleuko@gmail.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"edelgado20","email":"edgardelgado2129@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"8faede8cd0716b95902c8830d35f901908854a69","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.30.0.tgz","fileCount":108,"integrity":"sha512-NTKSGrim/9dutIpWW3QeXaf8vIUDnKSsrfT2IydUMjSC7Cl+bgBJC5aGcWfqFrscC2mn7gCnoSfCxxOpZVuOwg==","signatures":[{"sig":"MEUCIQDQxt+wd+wCIS/XEn/hedKs9Bf11NQqcQVuqky4KGIPFQIgBmUBS0IJ7oyiGMQY3C0gPYTKz9Irt0gVKSkZFl27cIg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":259395,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiDsX5ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq6pQ//Tb4lgqxJIl2iC8+CFShG2Xb2RpNw4Zeqd+PwTp/c9DQUUYG9\r\ndquOD2dWQsZ6jnqHwrDnQ4STxziRs6/uIGp+IEURHPBfiOWbPk5ss99CyIFV\r\nVWO7MClwgj/kYAvojNrkrPbY2DjAs0c5FHYcVfGvqYJ8nW2JAG1CzR6IvavC\r\nw9S17fjfwUH0yJ7+mKepxzo60SsgmlKhEZqhs3zi3kHfjrivKDtml1kfx1nP\r\nNIwXVdsLi2AU3h9W78lY3lz+JS5Pp9Vgtmtlw93v/4haJKW9gWymgVFZoAkm\r\nQeejSgFJ6EC1BofwlziXndciA6fn36U9kjuNreC6wXoce3gXcp/ai4BCJaO0\r\nrCtwkHkqlt4+6yqzEKZ0ASdl5xYFHV2IuFX1tP4X09zMVIb8SajumnF0V5Or\r\nLTFchaZz0gGd0QrgczXjyn7AkOiAq5fY8TLNv1lluCdtdC71/Y9/tWZVwvzA\r\nKfhq7LpM7YPnrCpYPwFg33jUfEp3q92umGRkE+Jbtgfq9QYs3VxRPVhg3eZt\r\nKLbK+pvVPmLtvJnq5U8/SQ9DtV1l5Cc51LHF3W0lsrkTLS2WkG2VsiXOtv4z\r\nPixE6hv/2hZGFNgsvg6v3Pm4t2xL3lB6THQ3q97/6xhfjbRAN6R3BKt8EQ48\r\natOhZVupW3lNZ6Jxu81fUJR3/n9UsCNwKE0=\r\n=6APg\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"aa62ee70dd7d34bb0e30e26bdd8ced3c61464487","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"7.24.2","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"axios":"~0.24.0","react":"^16.14.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.30.0","react-native-permissions":"^2.2.2","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.30.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.30.0_1645135352961_0.13197110154787528","host":"s3://npm-registry-packages"}},"11.31.0":{"name":"@brandingbrand/fsengage","version":"11.31.0","license":"MIT","_id":"@brandingbrand/fsengage@11.31.0","maintainers":[{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"danyleikoserhii","email":"sergeydanyleuko@gmail.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"2b53272c81c91b147961ec3ce5698b429c52fb20","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.31.0.tgz","fileCount":108,"integrity":"sha512-F/zU082Ma7u72zeE3TDsdi73ndi+kUpR9F9NOA6v5JcXUMjC9VUFVT2EyPDJn8b+EOf/r72DAD7HzZ4v0d+uXQ==","signatures":[{"sig":"MEUCIQC2DMUIR9lBadwFT88qFQwJKt7Oo26KOgwsYDcgJLPLbgIgVM7rPXTNg+mIRb9wCQy9g1E1XYmHSq02dlHIi5Zit6Y=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":259494,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiEBkEACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmozAA/+PLC9i22mSVdFqLpkNbG894/b8t8k3C0un67PkoMGO0AmtJS+\r\nN7kVRogjDKDbVBg8DQgj3oeKbW0NrtskkJPciPnYWt+ako8g6UTB8Y/nYDL+\r\nphoNgjGWZyjbQ0AaT+AFYC2HnDZ+dLYZWpKKVV1RGmhuvl1QuTbuhAEgrt87\r\nzP8krFEimEHpLidRo5mKVuFj90kH809NDpPv8T64qHEkssUJuHX3FUUoRm4E\r\nB0G5mYU09PWhYJwc761ywYpYji86z9plV3Ag9PpsDQfkvk5gPKj6EUfQikuQ\r\nah/5GWBbCXC7/WDNJkz2BODKZXWUq8jR11+Gn0/IDId3NTGMQ6YQO0IHUREf\r\nDNZQtTnOLZIgHZj81ZrpmxYaJVcRk2rpdQBkKABhnyOFPGWwTIga7wcfAl7u\r\nJxsL/nhuLa/+XV7g072zBHtgWGb7C3w0+76ov4auw0pvytRDSEl23RmHpGO8\r\n7JyfjMxuD68LiDwRHV182OMqwf+OSba+KPdfaVFHW4rp+0PCEvk/UIGaWJ3A\r\nJZSIvXvQB0l1RrfM8sg0dhrme665GHkUInt3jtI6SDFjw41vJy5Z5Hcr6T/2\r\niJN7a0JD5KYaqMPeZcFt1mDTThHKJyYwUbdeKa7+ne021BEE5sIvOLCVCIT+\r\nddoizGj97+H0XFE5ygOatm1/d/R14+9yu3A=\r\n=PoJl\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"d03f71a96152c8c9aadaf1121c20ef40fafdd3fc","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"7.24.2","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"axios":"~0.24.0","react":"^16.14.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.31.0","react-native-permissions":"^2.2.2","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.31.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.31.0_1645222148035_0.9843199225676986","host":"s3://npm-registry-packages"}},"11.32.0":{"name":"@brandingbrand/fsengage","version":"11.32.0","license":"MIT","_id":"@brandingbrand/fsengage@11.32.0","maintainers":[{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"danyleikoserhii","email":"sergeydanyleuko@gmail.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"de0adfbe3c77077d65c38c8da0649f28d29b991b","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.32.0.tgz","fileCount":108,"integrity":"sha512-bQqzTQO6fLOdEby2EoEKbxkCnha+h628FTsfs1XWI7fAD6yDxH2kOcyxFAbknqtgB/GmqzpttA3okIfw8HmQLg==","signatures":[{"sig":"MEQCID3zqf7pvYMfhQb8gvW1S6XHRuJc+7KQEyVJw9G2FcDfAiBdMcNlhabDT95INuzNkgpBy4ItX+lx10MaBfGdWdMp+g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":259593,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiFTWqACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr6hQ//QHznoyB4XSnjn7HwYoMY+0E1+k5uOv9GiTf7WDXxrQJlgNhd\r\nPrnpVFs8qUzGkb7MMlgVdjDzBVqf0ysAmvri7Pbuvov/qgqscC82OcfxgUFn\r\niOA8Jencz4zEA1t1OFPNyKbcldx+vQw5kZjIYj4dKyN6E8FpFLnt4DBBbYlt\r\njIbXADZEL/aIuPOFy5ZTRP3j+vSBqENGuSuv7kf4K9DwklYtJ5ZBnLpQ0SAi\r\nPfCxfb+HtHRZ6NWFrHBWvb822miI84nJn8xmonpPA/U1b4dRZKwMnOKqSu6Y\r\nsKoFGxV67KFD61OjDvC/yTN7HPHUmITxtu3aMq8/8pGkJP+efde/8nGDwwLW\r\nwB+Eq0l1FckrTe6uQTbDCDi+nRYcDTtaUMui3MHgvmdQsXzdCQLi7wrfMoT1\r\nE0wY31lKId9BBgkHZ9ensKT9JklxFH+DGVUI4L74QbnupDu8tntPRtDeHavf\r\nUCvABBnLKbBH+1VIP9n5nLtBlWGX1uBaSinFRK+JTL0rMcXr3c35rCub+fQf\r\nhng+vwY+RG86YxM//M/SaIneYwYWFF/XCgD7Jz6C5aNeLq7Jg4i8B/hYoO+r\r\nRgx8NpNkclO4wwe9alzD91oVkXT3W2Su/FF9ko7+b0oyzO4SfM43Zvo87qww\r\nV9n96UIWOKko0Og0Wk+mwBG5bfIRTWE9F7s=\r\n=09HT\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"03daa521741b20b5e27e8ab9284dd306f2bc8e2a","typings":"./src/index.d.ts","_npmUser":{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},"_npmVersion":"8.4.1","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"axios":"~0.24.0","react":"^16.14.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.32.0","react-native-permissions":"^2.2.2","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.32.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.32.0_1645557161971_0.6219511339185764","host":"s3://npm-registry-packages"}},"11.33.0":{"name":"@brandingbrand/fsengage","version":"11.33.0","license":"MIT","_id":"@brandingbrand/fsengage@11.33.0","maintainers":[{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"danyleikoserhii","email":"sergeydanyleuko@gmail.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"8b18b34d63ba0df2e4eaa25c431daaf3b78a21dc","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.33.0.tgz","fileCount":108,"integrity":"sha512-UTFPQDx/cnljpI7A6TYFiEaPg4/fYSIcPfmrvTI7JaZNDHXAlSOaQ5/KVmUYiFE/iGRHT+xijkTz5bnYMFOvRA==","signatures":[{"sig":"MEUCICX4p/ObkPwb0gOT819sO8tC/kpI2kLVX4dPIUVe6EohAiEArWW80DR2yqGXDDH8E3rejxB5mXQoKQL+qoOM+kpOu7I=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":259692,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiFsxxACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqr0hAAl0OqnSofvmkfGsnSNs3tON+c8fuL77XZGOIP2Q8dPSIwE7ak\r\n4Lx6l3Y8tFB7hd1n6E8PezVuzjmC/bieS/I/NR1uEIXGta2V9/FFsnkfNXg0\r\ne5Jxc09U9X1aVcyskF9e7YoaCmKsJGM7V58mjJNzHaawOnoszW09Hlxk7GTS\r\nMbAT28x4ijnH1vzZiiEGT6lpK4mBwoDysxkD0wCrJloB83+iurTC2WtitPgk\r\n86Weba6RpHmuWa6f/IHCxG5m4rtCtq14//qOjO7hifBYLSN8nJUmzf5BKQ9n\r\n5oHBG8arCQib2qn3z0nCOpyVio1Hp8ycLLEsv/mDENdOT/DkWrdP4j1ntq0e\r\nmjrC/IhuBjyLGa7pogThL5Ipaj4bxfMsCbD5Ewj5OqXTtz4ggJDMtJaYSvD5\r\nsqQT7/CkcR72jQznG5k9CL9xo250GquB3wNLcZLLAxRksoJuiNh1lhqMXjsY\r\nhABuFm1My7CZheLJMXJRiXF2Yp7J+Lu2/aRGaQx1Z1K8tQ2KGpn8yCL9yz17\r\nD3iXjJgBht/+FDmFOK4bVnQPgxZOBSRZwiO292T7md/HP4LbD7eijz/12Wq6\r\ncSleamvnN0hq/yQg1mhKGhfYJRt6kTCdGL2Q3uSUk00M1Wr7tOP0DXirGu20\r\nRBn8IQY0uQGHWfuSgyPr95CNULYc8mgOpXQ=\r\n=EJn5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"86c7d60e68466202c6192b83a5d594cdacbf4076","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"7.24.2","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"axios":"~0.24.0","react":"^16.14.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.33.0","react-native-permissions":"^2.2.2","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.33.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.33.0_1645661296943_0.042600285149249295","host":"s3://npm-registry-packages"}},"11.34.0":{"name":"@brandingbrand/fsengage","version":"11.34.0","license":"MIT","_id":"@brandingbrand/fsengage@11.34.0","maintainers":[{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"danyleikoserhii","email":"sergeydanyleuko@gmail.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"b22717b9e545d86fc1bf592b582d2d27ca5e81d4","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.34.0.tgz","fileCount":108,"integrity":"sha512-o2IZwrr09m4v3B0pr1WBWhdRiORnAADt0RHIX0wO/pONIVkRFHnbzsFYzkY/r96xmLW9so/w4/QEjZlbTrazsw==","signatures":[{"sig":"MEUCIQDHVuAcH8GMXqXn+LW9u3F9a71lGhDbmXrGFZHnWqciXQIgE2HVfM6jche9xAzBSWjCquG9eOR88jWCSSAr1OzKWq4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":259791,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiGFrDACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp0nA//XItoVVmDda/y1UfAKC/UCZ3ApFd+iDgPFO9nLLW/33obz5nT\r\nQGt0Zu1DfoaqY4YuQwOuj1ScVGKg530gfZGvjr80aHY2s+EUeGkUHqMaQvOS\r\nfSaMocz3jQ54czPSj39VQ9nERMAABwyw/Xtdcz90wjb1FamrTJ+AqkbHILxe\r\naTw75JL1gt/prRj07JWt7KlWdhm6c4g1YI+oJq2vpWqfNzRAwa3A/DC6V6Cu\r\nXkoYebYdS0ByRADTJ6jXH0HdTdP8FW+WWsRQ2zvXoOiPWBCVY6+lpqlUCK5A\r\nRWvDyQL+Pw8Ied7AmAeS2i6JzNPoY6zvDQvjOzNDyELz9+/9AcVgDKLOi3EL\r\n2tbiTCVSWulUaWw2rPjTr2DjCRHfTlgdpJs1Od323MN/V2UQfhPf8jwEiqLo\r\n+DYcoUGV/ZWNOd2MLptSzl0a5181VhzqB9kM44K9KoJZue+hFJFW/PkmqCZV\r\nAokWnFiFj34Dvd2dyirlmXxzf5tZF+v2lirCZq5pyjyeDnmEVKMJ3HKkcKyU\r\n1mtPiia22iD4nMvQL0LUXVzn1U+eK1QZG/lLSOd/TWFO2BCj3ZtQe371dkEr\r\nn+uDoRyAJVuivHP9/Vi3h1G4XlQGuFFlw4EsknFg0cccEqs9gXgfGfMTMF4k\r\nHLf5CzawTr0rdBnAgXamTk01/otmE+bA4Ic=\r\n=XJYL\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"954c0e6c38932480141f4234ad370bd17bd189ab","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"7.24.2","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"axios":"~0.24.0","react":"^16.14.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.34.0","react-native-permissions":"^2.2.2","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.34.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.34.0_1645763267800_0.45664915247435967","host":"s3://npm-registry-packages"}},"11.35.0":{"name":"@brandingbrand/fsengage","version":"11.35.0","license":"MIT","_id":"@brandingbrand/fsengage@11.35.0","maintainers":[{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"danyleikoserhii","email":"sergeydanyleuko@gmail.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"7a19a1e273dda65320b6f5bc81e2762098c18dd7","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.35.0.tgz","fileCount":108,"integrity":"sha512-JeaGnhuxurATJ673PZmxgOPfxrcg5Q5QQXYDM9yGJLpQF5JADHlBiq4nhZt20YccxaVmwTgKbMh+QKAKQo5UyA==","signatures":[{"sig":"MEUCIHMflMVe0hzSDLa0X6IMC17iIIfcPrGejMBOzG7V0xW7AiEAk/xKh9UmGYg2+/EWAFJ1kP7ZKpU2Yntfcc+B6LeMDxY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":259890,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiGV+HACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqxJRAAmlIZrnVHfCA+Q7h/zGVYocmqXUVWEBot8LOaaNVjmTvpYR+W\r\nF1YgBnIkks2LR8oQ2maZ+3uq8U0PFVt3Un+N6zrWQMZmbpILFE3eDkaHgdwL\r\n+VBSuZ2IquVEx8ts7iBOJ7o3b4SrKVykd+QTNu2OcOuz2XFIOEUtBi/G/YMy\r\nnO799+emNKKpWMHxvXsggRtml2wzTLqK8j4XAqxG3oH8mltwIp1KjgLMH7Qu\r\nzKNHGsSJsKkdkz93Cc8Kl8sXx3EhcNoVPcSbWy4qQ0av3SDv5d4LEu/FaFo/\r\nSWkyhYZvwzqcosFqtIzWXyqCxvBk+L7hR3z2FWk/iStRp8ixyXXmIR+KCclF\r\nGwwBMg+LkYT3JUFlEP2iiU6BRsp+vYvqitz8YNvLkInrBFs6ApvX8txhE7nH\r\nHakw3bes7/3R+vlJOBfzS1UF7DwL8vqxAHjliiI6+h4a1OAHSok0QgnjsmEX\r\nrK2LUCzeIaQBAFDNuTohA4ZWsCY1rxvRHT0TEe1VF8tUnZcN6slmChE93P79\r\nRjIKWApsyeOjL5DKSFqTzUZHumYWIDcoIv7CoCiEEldVqly2c2UhrqNaSNjZ\r\nj8oWAgaZm25AwoA6ZX6l5YsPs+DYcrkvKuWOsOmYcYDPsJTAuqo+8/oP7H/K\r\nx1QJV7R03bKiuEfWpU9EToD1GXgkIL1Jg+k=\r\n=nLtj\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"7d7e3b9612a44be884bfa07dc58d18de9f78cdbc","typings":"./src/index.d.ts","_npmUser":{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},"_npmVersion":"8.5.2","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"axios":"~0.24.0","react":"^16.14.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.35.0","react-native-permissions":"^2.2.2","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.35.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.35.0_1645830023444_0.1131723994351721","host":"s3://npm-registry-packages"}},"11.36.0":{"name":"@brandingbrand/fsengage","version":"11.36.0","license":"MIT","_id":"@brandingbrand/fsengage@11.36.0","maintainers":[{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"danyleikoserhii","email":"sergeydanyleuko@gmail.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"091e2fbc79872c265ebbada9b04517fb2e9c8370","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.36.0.tgz","fileCount":108,"integrity":"sha512-qY06absQsB9scR9LY3aaJH/H3yETbT2qLE9Dh8NSuRhtuJKVKPjbTzB4kyyCot/9cCv5inA7EOmKQ/rKk4gvXg==","signatures":[{"sig":"MEYCIQCh1QM5K9XdjzkyCugpXIl3Uqd7H6P+UoNufsBq+UeSlwIhAMlZfEtSuEANfLjnvWhLKbsRK9FLvV9JeiNWw1aTYtJ0","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":259989,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiIAhPACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoBXA//d/W+gJcWEOYvY29AjFr5DfFGoaayZVCH4HiF/HWZsfg2q2mz\r\nbbfgz84EVaYAcqqTRMEhZvawuGtBtq+RljM2+SDe72zd7feTYG6+3qYhh60f\r\n12zIvr1ev0CIKE/fehW8/OhjBpZ+7U+OUJV0EpGQ6aUUt0Rk7LFUNBzX99Ld\r\na2PvM/oKwZaFbOSUudRVXLx5gYS5yfQB170qy+k6jHdXSJN0El7HEsKmLqVo\r\nXnJbake0xuDwbC3JtdGT3WmV6XaU6X3MHegrSSR+ukTVAaBiTDapNIdGOMl7\r\nDVf1/7zoPT2/2g7vwnfW63D92heb/5VY/MLqSLVQU/d1iQOajkzdSuEEhulQ\r\nIgeRd6mbyyMtCKRorCU2XUZa8l8Eyl0TQRVu66g4+KWv0JYuqxKBntPqOpr7\r\nWbJDwVro7HUoDL3NrFE7XECW0EP4K4/8adC9Km8NwNc0seV9xIbRaOWTVwbM\r\n2usNk+hOc2xQ50bazFJfIh6EJcrG5BliibAkpUUK5GkPvsjdCb2dRMLSWLne\r\nLH+HGCQvLRYoBe0PZ5bWspW4z17THlcHMtrzmK+YE0N7OhmNHcl9gZomc4bJ\r\nZPfDYmdlOhUC28M2bVplBV0i36RhC/Sj09KrRjQSc5TB2T2m7TCKbzHI9bnS\r\nwHz077OhB72lxfuV+mKZ1Y2J7mn0NqRP0ZQ=\r\n=U7UE\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"9066c5d019d25b1d894d5c682aeaf0f96a9577af","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"7.24.2","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"axios":"~0.24.0","react":"^16.14.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.36.0","react-native-permissions":"^2.2.2","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.36.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.36.0_1646266447081_0.4194283701516588","host":"s3://npm-registry-packages"}},"11.37.0":{"name":"@brandingbrand/fsengage","version":"11.37.0","license":"MIT","_id":"@brandingbrand/fsengage@11.37.0","maintainers":[{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"danyleikoserhii","email":"sergeydanyleuko@gmail.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"e86ea04f6653e7fa5625be2160e10c6356dcc158","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.37.0.tgz","fileCount":108,"integrity":"sha512-fwXP7iD3aefly1hKgnz+EE7P1ZBozDMWGgEPe8u64aqiWp5pHkJt0MCUiVld+UXWN3Sfy8DatwWHozL2Q8k99A==","signatures":[{"sig":"MEYCIQCQg8+RzF+Rp8O318NBlR7XMdggDWPYu8onE9ebVAf5PQIhAMJpLvtNYwhRgfu6d0CfWDKB0e9QnngxU0vnWlVW6s/Z","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":260088,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiIULWACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmr99g//SpZmy/CWnMbQa8PXIQEQukXPSp45ICC8GYXbbL5uHBNOaI8Z\r\nEpDVtnVHrVStJw3ajT/OV3OfGaL1WKYxDP6001eHFuTgHzTUYA3/f5EWH8SJ\r\nyqDqB2xUWWiDiCODpTbv+gHdYQUxZfxPtte/2pZM0B6O8jEY/EOWXM4t+iqv\r\nxQ79IA6xDLJJn63ae+IppRSW2sTOFgm9MLL7v/32cNZkMoqd5Uh4ZemPNDKb\r\nNUijD33RV9g/ELk9fqAbjM85OWvO1XeK2+YSMM+Fm12pFSvMCpDqjm8R4Ids\r\n7YxBh2VaHd6xmswScW6P+PvVnbQ1QsF8ZLSiDxpEUOoy5HN4y5f3o3CoCG5a\r\nveFhutNr1JNtqSDV/IXgtiI+kspQ4sdZyH3FRKrnZtj7zvzXqf6qzHhBJl2H\r\nT1NH/u/1/PFcwcTUycR4IiFueM9q3ixy6UIkMIjb6K/SEHCp6j6xfGu7+I2y\r\nwYql/DYGqcKNM1eq7sib1CrHAJIFUVqh8EqVKCKd/7x7Jus8QHBKQfs4tw1n\r\ntoMkDh5bIkQ/xP+K9b76g/QwC1Hii4BHTisSzWhYva3fV+Lm+iU8uv/lpecC\r\ndrY8sNnoWWy41ggUUAKLlX9s30jvTAytzkR/395UkkC2qopNuIFrOy8KVtJd\r\n1YKP+HY2PeTvwExJK2qS200UvvBpWXzz6GA=\r\n=ZNl8\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"af82973c40d833debdc419fafaf30be9637c64a4","typings":"./src/index.d.ts","_npmUser":{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},"_npmVersion":"8.5.2","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"axios":"~0.24.0","react":"^16.14.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.37.0","react-native-permissions":"^2.2.2","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.37.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.37.0_1646346966789_0.8012575205171013","host":"s3://npm-registry-packages"}},"11.38.0":{"name":"@brandingbrand/fsengage","version":"11.38.0","license":"MIT","_id":"@brandingbrand/fsengage@11.38.0","maintainers":[{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"danyleikoserhii","email":"sergeydanyleuko@gmail.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"92d43d3b90aedd6e930cb9aed5cdd09ad40f5af7","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.38.0.tgz","fileCount":108,"integrity":"sha512-rQVJtPrgWlKdz09JCKBRZFSzixHQiOtuzxPV8mej2BTBW2Wxs0jZImiwGbbfSF0iLVBA7qNhulZDxYg/pQKkuA==","signatures":[{"sig":"MEYCIQCYKFZSLqMuGC2AEr+0VYxzkbtKhbTknrE4NaZd4YZroQIhALuy9FFPGTP2FsoxpVMvx8pRo4tMehmDwZBxYOrvcfms","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":260187,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiJpB4ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqoNw/9HHNRJlL8rrwNAS819ukYROby+x3HjADlYsjXRfNIWorYzMCX\r\n/71POnIbdEcy2HFbxcmvXRaayAGIw9PyKFN9YW+rombx5d07LYH1qmt/llHf\r\n3Mlx0lX+N5xsw/RwfqB/DCe4YRGQB7vzr3TloeztIItEI2DBhIJxVdIZq0y8\r\ndH2hAG1NIZ53nVGW3uph34v5QPt12w5UaSmfI8Cj1WHomqjm5+cpOSu60l38\r\nS8I6gbxjDkWMUF6UPQwEJFWG9z8jzbh3MWd/UACyANS+NuKNV3nLLL6j7CjE\r\nVE88vOnG/s7SAk9OXten0Ye+ogSVQsFmtcZ17x868kJroPTbC4H2J17CdHTO\r\nw/W0FJs9rMZHwcJx0iW+KkVE8/H5o62LRqitzGROt0NdImCHGWjGWcK7KOp0\r\nTeI6krBjCNXQWmy5bu8qRXIMS5llCb7U6XI7ium2ZjG63eX4ZtFxrqikU2Vc\r\n5TBxHbuWExoBNzAVrzshZyK6abhenOifNKfjtAy49zmKgHPYiNMxAa9Hpc3t\r\nWLGm82vZrskjb4Q8epBWML02l/RtmirWdMIHV8WIAr6jNqUZ84FUXzyecF/B\r\nbtTcQfkStdF4/u2zpGIcIyTwiLaANu/u/gYhzMH31FitXXg5SZxy9UY7nng7\r\n32xxsagP5rMkTNGywuLX9meifgUHiFFTThM=\r\n=i7/i\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"bddb7d2a09f977a9eb0e180e3e99532b0c2e6230","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"7.24.2","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"axios":"~0.24.0","react":"^16.14.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.38.0","react-native-permissions":"^2.2.2","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.38.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.38.0_1646694520454_0.6736956875682583","host":"s3://npm-registry-packages"}},"11.39.0":{"name":"@brandingbrand/fsengage","version":"11.39.0","license":"MIT","_id":"@brandingbrand/fsengage@11.39.0","maintainers":[{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"danyleikoserhii","email":"sergeydanyleuko@gmail.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"8eba66310fb16517886e827dd56910929f64a4a4","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.39.0.tgz","fileCount":108,"integrity":"sha512-iYt6n4gqVdXiyYcFStplAYkkJ5H/QvwKomoQlCCx++d5Fs1rXJMwj/bb3FkfXvBcNnM4Vp+9jlSPP8EoVDz4Pw==","signatures":[{"sig":"MEUCIGHU7c8rgY30LsNU2h5Hc915K3Oe+QouV7Rpzhy9YvCvAiEAkGQZUY/Y2Ht/+siEflDN4r4FHOSux6MEVEjAUX13CLo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":260286,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiJ+avACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq5pg//WXDM3jGstGwfkHRmLxGGiUVVMuHw/nrA+jeQ6Cb7wV2hbr7K\r\nWaVZI7+Cwc7pEFc6AocjKClfoG6GxMPvRLeq494EdtXN7TprDgXKsTPMd8Or\r\nszEVUCXZS7/WMHgNii8QGYdwNPuMJKyprghPgnO6uny1MphJE8l/WjOCJAuD\r\nMDfhvZ7r0CEX03urVtggSZX4HjbKn1aKDnvs/aHnSWH8B1efDr6rtJzV9SHG\r\nHFtEPyuv+5EDbHTcDiP33XanKsLMBthVB+eV54CfT0j+55QCerASI7ZkbUKY\r\naYy0M31dTbJJnYTxTrF58tQGQySqzwNEuYur3U9mZdQ89CsbEKrGwkebJXXz\r\nlOtSp2wI7B26tKjxmeOIBeqWzMN9MrqTeB03WPO1lMrFzSq7JzNb05mTXmrq\r\nG+ASn/OqYVegj1libO7u1wv4x5yp4z+lxH8sgXTo0CoUzKaW4y2ypLuKjuWC\r\nhlzljU6B8Gg9OOKYwS28JOxQEcRcZCpfM3K25+fxfvA+DnwkOAAjgfWEWErp\r\nD1cdHn6EvI/nnV/TzISQqeqQ0ghWDJc1QlGjZ8Mb6MD59sW+7BVcn3pQOstj\r\nZinRZMCmwroP3SbXtNDO8af5FpmiiULjfL5qyDalj44nTAeKxCYfwRFahzHM\r\nOnx0SHA7aR6TlgeBC5j/3btNdDzIkljwl58=\r\n=Xxxd\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"aa27d1d81c0f4fa5302022ab7d52d1bea1b3fecc","typings":"./src/index.d.ts","_npmUser":{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},"_npmVersion":"8.5.2","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"axios":"~0.24.0","react":"^16.14.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.39.0","react-native-permissions":"^2.2.2","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.39.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.39.0_1646782126918_0.1319680999070758","host":"s3://npm-registry-packages"}},"11.40.0":{"name":"@brandingbrand/fsengage","version":"11.40.0","license":"MIT","_id":"@brandingbrand/fsengage@11.40.0","maintainers":[{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"f6a4363526a12e0bd38cf71bf339fa12d776d548","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.40.0.tgz","fileCount":108,"integrity":"sha512-5i0GVHdsYfrXkgRC3N3RXCBXD/82TE7fZ+R+kiYJ3dr2F82MHf5znQibSbw9FJmV5WPwYM7HA9PqswXD2TUcLw==","signatures":[{"sig":"MEQCIExkj23QBZUW+l8SuK3XBMjkqNXgZg/QuESXKsx0SpEPAiB6dImNM7z8/KWXkXpy3jV9P5J60ow6+5H4cxueoRISoQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":260385,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiKn3LACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrNoQ//VNOAlFLRjMVnTMOfK1EoRT+dydDTMwmCAftvhjpEcgnxgfxs\r\nj08YxuiJRfUZW3up4LLLB9hQKFgmz7UstnBwhI5yAI6rypQGLCtaP82yMRK8\r\n0ImBKteliY7ZGfA2TFmbHqRhJJVjkvhoA8uTsQV/KKGlytj9J8ZtkASYalIE\r\nw3LAxcbRfF6fe1MRFJB4A/s5KS70P3oOGOQ8WA60sIFV3xo5Ri48DTVsXCVZ\r\ngDVGW/WEHrxHA9j6OPabcKGEWSigUwZWx4SqYGiQr/OKnMBo9hLKV9tHJEsl\r\n0BZvA6LXjLP8jyFSeRtoKS7vAqgzwSjfuO22Vdombc2sT5JBNbNyD3nHojlF\r\n6zs33Lk3DCBFh/pnu91YkIPLj1A6BI60kCxSiWfvGoYQi/asB7oFv9mzC+RH\r\nm3G9sZs4hfoLjgTEN8jYgUqWWDmJcZPTqkODGzUBUVK+SHMQTMaU7q/3J0eK\r\n/PqT037tl+Q+OHlEGduo3tQ+fkHZt32j3OcV9Y9Bse5RhLAvt+gryqFUhbCu\r\nI/ZgvXXA45bus2uN7oHKrYhWle/Hqdg8P2/brzkPZsmAae/U1HmfTS6O2sZe\r\nY417VUqfLjAOjtMh4CvXMGCCgSqUHBJn3/z2tVC6Twmw/xmut/wLD4Dn4M2f\r\nUQg04KHqUqlxgw6IjnN44nw2SCB1Y6b+A3w=\r\n=uOmI\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"aadaac3cae68671304a94b45ecfe30041b129a1f","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"7.24.2","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"axios":"~0.24.0","react":"^16.14.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.40.0","react-native-permissions":"^2.2.2","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.40.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.40.0_1646951883684_0.9229564172188998","host":"s3://npm-registry-packages"}},"11.41.0":{"name":"@brandingbrand/fsengage","version":"11.41.0","license":"MIT","_id":"@brandingbrand/fsengage@11.41.0","maintainers":[{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"manu-grondona","email":"manu.grondona@brandingbrand.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"dcd652649039f87ccfcb4ffa17e7e780c8a5dfbf","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.41.0.tgz","fileCount":111,"integrity":"sha512-v1uBjt6tsI62NZZ7aD0LJoWnTiVaShuMBFUvZ0h7ImLzUYJbsk87/ftk83r4aEzGkzEzicedFl109TCYk4DO9A==","signatures":[{"sig":"MEUCIQDLoEfLi6tpT6ytQHlEsZSrVYCfhYBE/TTPAfgwHyykbgIgFh/7zC3JGpoEqJ3nRMV85I+Fw/yVTo48HY5Ez3eWL8A=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":260825,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiM6yaACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqtHA/+Lk0eh7eKCZm3Ic0mrcV9l7Ju9N1qLqE1qTaO/KqzX5EMJTBE\r\nhoK7k9MhZKx0Rq9U/Hi4qObTPw0dAdT9kq7Jh0dP/FwgODDL0gXn7qwVFkKS\r\n2NGQjmTzRKjN2xr7CY3aRVif7ho6pT7H5wJv8qsdB9O+8nESZEO6kOkCNau/\r\nih22NHuJ/Ic6uX9icEDvKwEMI+2DVRiwS704NKzVJZMDCtML7ThsZaFf/WsE\r\ntDRuXX4gfRWy9SRk9qsFChkkN/DVNf8IA4oEg9cPwX9OtH5aOjcHWyXhw1uD\r\nnPfp4/57T2foZCSH9PESK85O23qbssgyaUfuypS3BfH6GO6cvH4h8ZtlZUxz\r\n9wejmXtoxx35NdijlfeKntpVZ9nnB28f6bUnqnyLtLYbHDLd61CaV9PX8SDR\r\nwllQOF2nM/NLe+5iigF8NVxzCLzRRcn+p5hBqG8uSBo4WV/Z2cVPZuocBpc5\r\npAtial6fmV3dSA1B3+8UIjN7BoBeFkGQ1XcIY8F6An5CblLkbCVswSc+aVDJ\r\n4l8GceCoD1Z/Fs2p3LfdcqH66UJ1hvj6KPqOVDQ5qtnaaWPEuO+RcjiPysgv\r\njTrkqRIMDPxbbEQhybi1rcHuwARMYnIqVKvtmiZ5nE1NExx9A0F6+0Fk8cIR\r\n8iEFNcFWgBCG1ANFLjt56vJkt42a8IlHyfc=\r\n=qJj7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"d3cfa8cd37f365c98681253c7232294a6ef45e55","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"7.24.2","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"axios":"~0.24.0","react":"^16.14.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.41.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.41.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.41.0_1647553690570_0.2512659164753448","host":"s3://npm-registry-packages"}},"11.42.0":{"name":"@brandingbrand/fsengage","version":"11.42.0","license":"MIT","_id":"@brandingbrand/fsengage@11.42.0","maintainers":[{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"20c8b6b218920049327eddce5d2fb1678ee8d20e","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.42.0.tgz","fileCount":111,"integrity":"sha512-JnNjIqUBAKwau35hfJCyhs7z57C/A1A7iOKllIszAAh105svszMGPPEht+nmYSzr/sAf+IKCJWCQKHU0gYGyIw==","signatures":[{"sig":"MEYCIQCZ1NU/i4zz52GkHCeSuRg3aPiNHKslgZMmTa8qVAvRXwIhAJh2EJWVXq/PN3BjHpvKdjmJ4imphdF7JHdMKbrADbN+","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":260924,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiOOUCACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrbYQ/9FxCMQipTcYwgOqWnVp+cWsIgeRRPV3h7/vR0uaxNnSSWn3pO\r\nsg+UOAX3jA8B0ivh8pGn5XNpIiWRuT02Hn6LVZRHTSQQlvk/fvayCjQR5Rbx\r\nVoFxcm+IWrdZqxtXTjH2tXS4rPGz21kwwklG9pxnREYECYWfMPC0daqfrN8o\r\n8tTOivy26BcyMxJ+ySpjy0Rx46A9sIwz/fJlg1NXZnn14zOFJVBRHWGvTR8T\r\nXDF05ev0ftWdUvH0ELr494SIp//qTMsU8QPj26upgk5y4SUbed1sKd/VfWAy\r\nA5klvf1q4e+FynS7VP1mFRyY3oyMPLNumibvQgQGyMM7UueeFncdDhNLFmsf\r\noyiaYESrJO4Ngj1atGNG2cbY/VwKRXg8hQoLWc/E65q9OjHzAr2JvLDysYcq\r\nXtyuM0C+R9pWT0N+H5J/GQYM4/8yGV+Adkqlhw4JWv/61osjl+vlFc7BXhFZ\r\nyf4/X0fnLasXIKyg2UugyCPHy8eVph/7Lg/8yoAeBQSVP4Mijjbg8r8IkCiS\r\n0EzgTxJ66BW69QnXDm7gBNy7iambLImm5P/HE8ltB1g9br76WKQa/ZEvWobZ\r\nxG+MoViM+RDU+bpUNvJoShhNpsp4/qQVxLFrQKUXIJn89cNvB0EB79tVBJY3\r\nEH72+fNhR49K/5AUuygMEZD9vhFlqOPBXUs=\r\n=RsgE\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"7c974748d1c85c29a5d9a5753dbb046b367d7a4b","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"7.24.2","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"axios":"~0.24.0","react":"^16.14.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.42.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.42.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.42.0_1647895810140_0.088727931509063","host":"s3://npm-registry-packages"}},"11.43.0":{"name":"@brandingbrand/fsengage","version":"11.43.0","license":"MIT","_id":"@brandingbrand/fsengage@11.43.0","maintainers":[{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"feb51e9929acf518c4e72d48f45974721c9edc15","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.43.0.tgz","fileCount":111,"integrity":"sha512-fII3YjSVbvpgSR8u8g1xCvIDOBpt6BY4DLa6xK9Rx0E1Lg+5Uep1shLNErrcVVqeNZ2+jIWg2Ma+9KlcY6hLHg==","signatures":[{"sig":"MEYCIQDzsYVeSH5gHFk9sOy4aeSBqTaj86WlbL6fXx+xkjb7UAIhANhMsLv7ipGcOva1ZVsYL/Ve41TpX9Nh9m+mPFWWebmJ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":261023,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiOjgkACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqcWw/+JGbIApbjpe+qBXVmwq5BFn+IFYz6n7uIleipdSR4cXvo6ONU\r\nd3TX49QPgLlqYRj6GzGs4M2KHIR/l8ZoTW/qDEDkqLYDi1KP8FXMR29l64od\r\n/mFxJPu9jZ7wjR8SUuCfcdxv5LtVyutwbqGz0uibfryicHGPu3sde+ckIejW\r\nSLA0T7cNDBwxhMx+jzsMHKQuHuZ1jgaAQbVqRaRTUyu+pZnfyk1dx3O7d9GI\r\nqureogQv5JkJnO2YkoRjp5ur3lGUnAL5vYU48+s00FM6Eyx3IDHXHM5IFsSG\r\nlp1JW90p8lhiFshGrWTh1E2BAfSs9KnuYHYD4cPHiy8UfKzTBBvJ0xLxROWh\r\nedGf+xZ5VC9PUhqt0tUWSgtcmOwFYe/4I7cD8t9hWWGxpocyKBe0zw1KLbSU\r\nNuID4wEh6p6DurckyUpX1CfcBgnBZKZbHzECfzoasSBMv7wi4MDe94CnH6e2\r\nVPX9a5dLO2dEp9aCwYKGAfl2WI88WzHSHUMCIcPiAXo4Z9E6awrZNWU+80Zt\r\nfT9JzEcJ8vLPf3Qecy5J0LXwLhyUH1Te5ikazcdNmJtnRYL8TgOGeeSbuB0J\r\nnGGZCbyM7SZXGosXYz9kRiMu6hxhCG73EMnQWiiEW12m6hh+WOn7yIUCaDXe\r\nngC32gSU41Q4avCZunwQHo4xGgs9iohvVLA=\r\n=Py+l\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"56e912d1dfb0391aabe02e610a9f0fa9490f8989","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"7.24.2","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"axios":"~0.24.0","react":"^16.14.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.43.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.43.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.43.0_1647982628493_0.43331725808352517","host":"s3://npm-registry-packages"}},"11.44.0":{"name":"@brandingbrand/fsengage","version":"11.44.0","license":"MIT","_id":"@brandingbrand/fsengage@11.44.0","maintainers":[{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"c394d8ed18b6cae4c70a8632cae12b32f1ca58f1","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.44.0.tgz","fileCount":111,"integrity":"sha512-ZuorwIXqpuIwk3PTTs/QoCUvSBuReQzO1X++P9pMA1ym4Yw8KO8BcyxbILtHs3eJTMguZKcIeJ4lBCjXNbAibA==","signatures":[{"sig":"MEYCIQCCX1QVp38qS2YjNmsuY4oYN8Rmn8hl5uBaz72bQcrZagIhANDhJGMJIc782L0kWSs2+16FTxDOF356BPK9IIc8/02O","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":261122,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiO4ngACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpO7g//crE5FpkArOl7rwuYK3RdljJzbHVPgkT1cZZHqgMUOwpD1HyI\r\njURXLgF4JHIACX0NIs8NPDGCxfWwDLlV7U90hgY5XIdf51jv40mpNK1CpIcE\r\nXaIX5cvPVWw3OIIVhcYqfmpihFzflndKgA+BojDv08orsn9Go/r9rXdtHMDJ\r\nSw/0AF3xAB03A7HHDUfEXFIbaGndxQeQFNZ5NYtUv8Dk1zKu379Wnqd2LFM7\r\nOTqWOTk7HaIjvERAOmKZHQ3n2Q9EyHIUJP5QbM56l8NKtQYwSjUdcm/mHHHu\r\nbUglSekUoK30yLXcgFyObjne0Kbg7rMrvRiDDv0gfOifUQ5oGSKcvtWuhi41\r\nAEGI4Tg8uYLDW0JAjWRGe8PuOCXuXSCDYnKhgASUQFOeSablMSZ1y8mL0tci\r\nTlm0wT/oO7RpGq2ksP8xP9QtAk7ldWdFo3Nr1DzN7tSZV/O79VDdQ/q97x5r\r\nR/+vAnvpOxmlWZmxkvTBkzfBIjdOXU9a8JN/IUHK1zyyAkxMWmOHVzo+WBEa\r\nLfekLfZsoKOIyXgqdG0cKehY0yKs1WKKZ+Iznk3p1Vn9I+MPwI1J7ZZ1S+s2\r\nDYh6ys6AZIvEm4+iudhN/jb2dNkfYcL7o+7rJH03vLEJnqSqxA9ocELD0Kaq\r\nKJySM6CCKqVeFHCQEsrmum3/bIEm/tCvs3o=\r\n=jiFa\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"5c2f4f186ce9d2e3018c78189941ccdf20185e62","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"7.24.2","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"axios":"~0.24.0","react":"^16.14.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.44.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.44.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.44.0_1648069088299_0.2658798628168837","host":"s3://npm-registry-packages"}},"11.45.0":{"name":"@brandingbrand/fsengage","version":"11.45.0","license":"MIT","_id":"@brandingbrand/fsengage@11.45.0","maintainers":[{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"b6facb4c4aa6803f8e8672f83c10c5a2461233d9","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.45.0.tgz","fileCount":111,"integrity":"sha512-RC+h5N3zXNPKt6NCRilpF5GwAMHbQ8iWvuwBNj1aPtbqEjdnrxkm2+CPX+Gq/66Civvk3W5iypXQe1Koa7TKDw==","signatures":[{"sig":"MEQCICDxfGZLI6nnodsPzH+YkuRrSqSZRzJz4ze4l0q1akUTAiA9FcWKuOvg9OWnj1DWSeLpNKyurBYx3yYUEo2qnaYc4w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":261221,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiPNxvACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq8sxAAolgr7t6MYRmVf4XjRujXj1uvwPCjNLe0uWjK/UR1002gGQnZ\r\njE+4zVOIHeHWUgt94JdrAb//o411M/gEygc4KbF1bgRh57X12Ess6JmxztC5\r\niQa0pBsGdQfvcvhG+a5Wc4S5/rOHu320kRoMVv2Wrvb8dkv/80gSGGfFT6pu\r\nSMz0iSRsE3IFuicbGSNGW9L3FzhwQbHyCEYhMl43+T3P3nEgH3Mnydab/Yst\r\nZDt5XZgmPGuMV+Mj31jTTOOBWliuvh8p43lTSbFUBJRWL+oNdiU7Gy6te6N8\r\nsiqHhcXJO2MZaaPpdrmD3QQKblMcvbTUWpfL5O6wSpYZWnudVDqux6qs/Hfk\r\nhAz23wgrM40IaWhg3m3qAW8Rffpvneu1aH5IJsSbY0WjFz+Ct+4acl5AVkDR\r\n6FdNBIQg7DsFSe60kj4ESnW7qjPKVyrFq+xKAwhwrwZy/smw68zGgT15R9Qz\r\nMpCUgNqz5/uVcUMzEf4LpuXSur9u1DuH5wqtQmqbXcxGep3Vgj14I8BdtEV/\r\nAX9SxdATW5FgDXwc1elGwyU/uQKDZLVA54q2n/OS5BtSpUtMjFHDWvjDtxLs\r\nOqm9nC/2qd5dMbcjQSqRaVZKIeW3NGrfSTC6JpWQmlqNacyGbLFrAgrE9CxB\r\nAHHrGcEgH+yZN2IyaAQP04wlWVSFvU2556s=\r\n=ORLY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"1365bb0940f62bb10ff73a28e99df0c256639aed","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"7.24.2","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"axios":"~0.24.0","react":"^16.14.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.45.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.45.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.45.0_1648155758878_0.509845627841933","host":"s3://npm-registry-packages"}},"11.46.0":{"name":"@brandingbrand/fsengage","version":"11.46.0","license":"MIT","_id":"@brandingbrand/fsengage@11.46.0","maintainers":[{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"tom.ogrady@brandingbrand.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"4d6d19b66e9812c5e86477b01e63291a4efdf273","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.46.0.tgz","fileCount":111,"integrity":"sha512-1SqCRDp455gGVhZTvuAAcQnxVRYKHjt8kg8NYQJIRCtrAgkyFgsMS2W7wQKb4yMzLxeGRpKJGYVG4ayF3ssoRw==","signatures":[{"sig":"MEQCIF241A5VrAMd9MuyqW8BOyIaamb9yMR7yHfZA0aedCa4AiBpoapV3Km1xeON8zu7qom6pnOGoA7pe/pktWBKIxQReQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":261320,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiQi8mACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq/sw//SkwYdnDmAt2/qDEYyOPtrVm+ooGU6jqG2bUvsOkfBiYzmEmq\r\n778A3UlUgm+CFfWNwxEnnvRtBC4g+QWfMTj+WS0jj0xWl3DSPFS8vubtqaK8\r\nnFBqzyjh1sQdTdxRtY/638kA+mB2jAihMez8CHOaDTysnraManaItvSknlKp\r\nnGtXYKNrSgUkXBIqjSt3OMLmlEyyhOyKvgAnIYIakZX9cnK28PCFiUB1A5Vv\r\nSChYoknxk6XcWmzopYgLPAnLQwzY/AFzNmTPe4mzcOCdPnA78qH0OOhWrlG0\r\nhrNR0uedaQOzkxOP84f/TSTwo3iQ6CpXJj3PTlpaUg4H3+hKPb/tgD7EBBQ0\r\nNOmOsXbNly9hGbw/79jkEbQz7iD91enp9IGJDbX+hxibcHzhYw3YiELphy9Q\r\nw7h9rcQtk26Qzuhm77VGT1sMeXm5XUnL1sYSTpBc4rXwo6H33Zj2Vm8WrDiH\r\nPww5YHcEMrd/ikJor5Os1eadckRmIaGL/J1gvTvfasnsL7cvD2hmh/FUAS7l\r\nvkjP4Z1fHtnBVie+tWyFZOJBZW8cg/tEqtpFhpSLgA9Cl6nyg8e3Cg2ZDi5L\r\nWjzkIrrLkISVxdF2LMYuHHfBgcgf7CrHdmKZBWJqUwu5pC7UZBrvlo5lYlw1\r\ngz7t5M1KlTYLiyq/BLGs45yruCbceOelJV8=\r\n=I1E7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"3d9c5369363534bc485e17d7c423e1fc61dc926e","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"7.24.2","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"axios":"~0.24.0","react":"^16.14.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.46.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.46.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.46.0_1648504613846_0.5049131579720096","host":"s3://npm-registry-packages"}},"11.47.0":{"name":"@brandingbrand/fsengage","version":"11.47.0","license":"MIT","_id":"@brandingbrand/fsengage@11.47.0","maintainers":[{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"tom.ogrady@brandingbrand.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"lhenze33","email":"lhenze3@gmail.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"524bcb95493983f39cb23e25eeb367961c665e99","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.47.0.tgz","fileCount":111,"integrity":"sha512-fzm5rAi5oTlFAamSUM9L4pMqGY4zeHq2Zi7H+vCbrmVRxRPEL612NFEPdNGRPqEbjtIdiH0em3FerqZ90/yENA==","signatures":[{"sig":"MEQCIAE+9ng5R6KLKOD9spnseVq1bDEiOgWnsH17gnVHWsWFAiBxaK79Y4G8hZkXy0E8kIbilAXmWP0RnQyw03+zVEOuOA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":261419,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiReiKACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqGkQ//bk1UItlzdEbHQG0qlyYtlz7a8iYECYc0+g9NodedC+haFlSS\r\ntX8Ge2xXWSm/XWWdvDq7l0Lrors4cGrFDcpkN87VXCi5OKevq2QPewr3c6KI\r\nqKZcFZLXfYfmP+1u4Lm24ELY4dsOVw2QBAuihDFfh1dl8DzmXk0xA+s7zFY/\r\nnS6U+BLR83bVe10PBaTa2/1W7qiAM2vFLc2q88AsIZsNEdVYtpcwvnmZjMtx\r\nds+lTpXuJi+Tc/OCIP/R+fce7hBihCpfOScpvrSf5w6t9SiC8YMt/IlCnCMM\r\nQfxjYiEy7mn1vqmbuO579Jajomj3h2bVvy2O42M27Jg/XawXLhAbGuY7ZaOA\r\nOuUtQ7r4N8wRPZlvOUvFeGRgixD3gwS0PWKZhYq8GVNNQsUAu3CViFyqzovO\r\nZP9rFOMLpRJZSFLutvlrr1W6JacuxhlXKbjtihybyjgz9KBtmhLfLWMUAUlv\r\nLLm6GA0I7Veycp8xS6STEN/KVJffSkpaJNwjIYj9aFfAb7JSHiDvhpfZPWgU\r\nytQ0OgIOAyODmP5BGbN8utSSN/bYW7MMt+AlF4TyKZUx0K6jmUjewWTK+wJV\r\nglzHHkRqdm0z2ZiWwTbdqZA1PpXQZThj1jShmJZgNlY50+lbM97ypt2y2ErV\r\nE8JVUOQrlAnymQEEO3H/GtGoU7IksoriT3Y=\r\n=txK3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"790b56f1852a90af35be71f4df0190dc46502c28","typings":"./src/index.d.ts","_npmUser":{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},"_npmVersion":"8.5.2","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"axios":"~0.24.0","react":"^16.14.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.47.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.47.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.47.0_1648748682828_0.2535792356748183","host":"s3://npm-registry-packages"}},"11.48.0":{"name":"@brandingbrand/fsengage","version":"11.48.0","license":"MIT","_id":"@brandingbrand/fsengage@11.48.0","maintainers":[{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"tom.ogrady@brandingbrand.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"3efffd333e5df5fed77edd5414413ec921cf943f","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.48.0.tgz","fileCount":111,"integrity":"sha512-BnhWQUZD3jN7WSa0JNK7BimDJlogb9jEHG/zLUH4GDrVe1vv1qLKEvmT3XvFpu1QWXqCMpfVAQzF9DlrrSi7Gg==","signatures":[{"sig":"MEQCIFKOtqaRkeZNnHyqlLEU4IrQ5XCJJXJVeQYi+nuti44xAiBtfxOndnXchds+knk/LlwEHu8u0op8Wup3/4MMWGJ8ZQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267522,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiTMQJACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrvSw/+MZuRaccZyUy9dJ9vLWjWtpz0Ajs3GEa9qYo3sYGmZpmQTeul\r\nZHZMzk2O3VVYUFYmwp/tpmYXHUU7Wv9GSox3YjfLqQypIlAD1XGSGIAlgIGu\r\ncx3dGFl7aTscuerl8iS0fc8IIlOTz8QeN+48Ai5kdJbKJiem81xR4hNE12M5\r\nG1myB5z9uO2HYNERrXXyzHgZnXvHQUJ3y2hO0mH6tIRt2KYFwYsnuBg/LIPa\r\n2gp6P1AxtFO8DTyLjuaFtVfdP+uf/X2HSeIKynKB43U044WkoXf3GurI129C\r\nXkDObHcPd47SdTOyKknld7JYeE8ZIxm6g/GYWOsks/OJJ2z99jsdvMq6EQPI\r\ndC8U3cTOE/XbrF1h2Emsm2BVjSsHKeJ8vqypcpswQUc0Its6YsDm4igMpXmM\r\n+FSyB1XXHl0Eavwq6bmpmYkRGyPhD46vRReblik1tsP1z8Um1e9YT8hS7bN8\r\nJ8ABLbRhQ3VNZDETz3AO2JRK1hpRAZAxl+E39t3d5Z1JYILGuLn4jJAiwCSs\r\nYppnKFLccME9DmQonygYa4TdQw0LGQF8zXhywPMfic4VtdPxwD+tEwmUfDhZ\r\nVTkGqS2OvOgYSdICLaOEJEA81c3Acsa1ok8HktJtm4lppWCdfB/wOiPPcSVi\r\nui+1tHA1q/mfUZSBHxW/7K1Q8/f1HB5+c4k=\r\n=oGZu\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"29699dbcc9f12d9cb29c263fe50d7ce473bb0704","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"axios":"~0.24.0","react":"^16.14.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.48.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.48.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.48.0_1649198089188_0.13543442715789356","host":"s3://npm-registry-packages"}},"11.49.0":{"name":"@brandingbrand/fsengage","version":"11.49.0","license":"MIT","_id":"@brandingbrand/fsengage@11.49.0","maintainers":[{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"tom.ogrady@brandingbrand.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"ce42edd8bc10d77b6081ab7b7cf055da977d2642","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.49.0.tgz","fileCount":111,"integrity":"sha512-VR2imOXRAmPTEqm7aeoJITwOEpdOeN9xhZo80XHonDNt1V3s2ZdSqc9g6+0xF1sBqHvYelZCa6tllmByvStumQ==","signatures":[{"sig":"MEYCIQC/OooIXqOF0IRgkve/GVe+OAOFWXacw8vxxDfXwc8mOgIhAPFr0/Lwk9ly1FWP6E4V9bmbEU8UOmj0irCJ39eV54rf","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267621,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiUKb5ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpygQ//ZqmoujeRMlmz4gnSAn87N4/aNFQWajB3H4v6FMyh3vIXX1UE\r\nO2LkOuCCi+Go93olj1vi7jjx/idQ2ZbhEn+7qVmjnNK8kLFfGsvGF736/yj7\r\nISzueLFx9iRDOBBCmcNB50niGCmcA2m85ZxJsGtccZnz+nvpYu3QaNW0YEcQ\r\nlUms0CmrVfKpX6O7kXLc+Q3lmBZ4OmYRO5s6INTopHaKJmjOzSfHXQLC/w77\r\nfQzEeUIjywN0jdhSLbuTpWrK/7XkU+eSiUUv5i6BpoUX97W+sSHt6QPPElja\r\nJUawvX12Uy7DNwNNZmtMIKthmdGEnqsfrzwb/WgcEX4SY19xBG5pf/0OElWf\r\nCEGHqZ8ujYOqRPcUwbZFh43DrMnUP4iP190mKef9pCV5IX6bOzW5SgXNBPEx\r\nXZinlfRsjspVDnWbBQyDCz1KUtcJSgBLi8e0j7K3vOSOfC1HUwG0tJM+HL/t\r\nXLFzSQQIHsg7TfQT6t/UwtSRBan2XSY+jty9GN0umcRq5/gGwDNGT7nwp2XQ\r\nnTyaPCdV7/5ZQRgu61+MGapq3l3yz3LNvH+9phdyPzZb0fpJAstFVvO4f9NW\r\nAx2IPTfBWbRjHhKhx8L9QVCLmct+Y7BclvswD+zdM0CqGJKQ+Mxzm06AE00e\r\nXNFfT9/OUuSgVCfJXUizsnauzLK6WyuozS8=\r\n=Vx0J\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"5f4ec3f489f25f5d117dae681605ae2c4fed168a","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"axios":"~0.24.0","react":"^16.14.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.49.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.49.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.49.0_1649452793567_0.5010660182582771","host":"s3://npm-registry-packages"}},"11.50.0":{"name":"@brandingbrand/fsengage","version":"11.50.0","license":"MIT","_id":"@brandingbrand/fsengage@11.50.0","maintainers":[{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"160ecfe09fdc6941c0506edffb42c044108675af","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.50.0.tgz","fileCount":111,"integrity":"sha512-37gEBIbROP4ACyaemTUfNQLRPymCiElDVFLVjVe3tG77IZWoLcjebvukovxCqx0vibP1hJNQ30n5GoSzDspEyg==","signatures":[{"sig":"MEUCIBLP51Zwdrc1me/jE6jZVeDo/FqWii0mCS+mWmJ9SlkzAiEApw0vZKeRZV2Z/hW/4wvXClA10GsccJJYNhQL29ksoLc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267720,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiVLbjACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpmBQ/9Hzk/PLuRVWw3AUflMqFr85tk6LbMPoS/LeRHN/B4FWPKPIqQ\r\nox0BHwFWIbYHKIwB70WzOV3pkLn/MstVXKSOo4au4ojVHwiS9VehWWCvUe2Z\r\nk4ms1yNddkOmvhDBeyKNrDnqNoLMc0CRLur0eLEi+yZTTepETWG0Ioxfpywx\r\nzDW0GynkIqAM9+Z4jVSYLZgj8ne8a/FRSVc+gThmMGbus2lOwYBJAWdpwle4\r\nAz32hxsmJ5WKVRsCOsZifzIMsKrhqGHEq+cB7smF9L0AdXEGFF88gOUXYDyp\r\nWokMkoANwAfzTxfx3CZQlnNYjNw8pP4GYT07Z7AoJZ0IQWuuDJJ8UFKxMvoc\r\ncX4UeEtcKan9YfUWuaPXG9dpN5eJzYdG1W3DgvKRVWWF1qov7+9kjt1Lp2Ce\r\npYRF2a7qVrAU0mt6G4I6BNKTwnKPozBn0X4+9rkUAOLjI/ONaTGdpZtmqRRq\r\nW9OIE/xLoG6oqt+raOhePrYxEGBZSg2iu6WArwTIOqr1SkKz0gsZSmZOig1s\r\nrOan4L8S7G/77g5FZKO3bogpAE/McsbOSWk54ox1NiTszUDFmjTYckf72Obd\r\n+xI9NoAnLV39u+fcwc2cJEpL1V97dtAvbxutASR0IapOPkp8diSo7A3hqwD6\r\neQ7hwOxO8m9oS/7ZMsmy4yLw2QWQm5Q86P8=\r\n=Kl5k\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"82b55d64543b84c7589d35c24e3b9727f383e1b0","typings":"./src/index.d.ts","_npmUser":{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"axios":"~0.24.0","react":"^16.14.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.50.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.50.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.50.0_1649719011392_0.4564115667354851","host":"s3://npm-registry-packages"}},"11.51.0":{"name":"@brandingbrand/fsengage","version":"11.51.0","license":"MIT","_id":"@brandingbrand/fsengage@11.51.0","maintainers":[{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"0fee445cdec38891fe2a4d5b355f887aeeefa607","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.51.0.tgz","fileCount":111,"integrity":"sha512-UovTDXc+ixcGbntGfAMnu2pRNNDTKEoAPloaqaQdUPDzTs0+ke8v7NGeTnWyUI6NiM+pUQqg5MrkDUZNoz//hw==","signatures":[{"sig":"MEYCIQDXA2T1t4aHaejI+UNigEhT7kKtUs20INejefMGoRbjJgIhAPhUQZG2EZN0fRot7DTrNIa2miMSjImAthlTqxB+T0UC","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267819,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiV16RACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmquBhAAlbaFug0Q88J9bUkjXm2BeNZlo6ezYEKlV1vT+3swuFAajB/V\r\n+uY415PqElHwgJpEp3/1Nmq9QP/NuSsfVJ7PWg80qnuZt5KJQrKIqe75qauE\r\nyTac5e/l6m4R1znebUOBxqCQBygDVMkNnHWyEE5pYUKqlbjX+MR02ipPeu0b\r\ncqHbOcp+WBg0OaAwiIaMW1axWC4jvu1X7Z3LNYm+FSHUTeTHET4u9v0imT6h\r\nC7jqxjPHvQgxTZECpkC20TATxIZryu3wXeZ6aIZJg4dZ+5Hv9TbVjKqhk5cf\r\naVL6Y3Ek3OEhbbvmYLgmsdlG2zf24g0ks8BcHnukVgb49vqyQzGgmBrvaqkJ\r\nW9FCmMYrXRwXSa6gTt0dlI+M5iYVVnqf5tPG5BckhwrcoZzu1+0WMymtMkNX\r\nO4T3UG3UBDDNVkXasE3UaXni5fBF4wng9UkVYPemwqwKie9GXtPlTH24N+CG\r\nPPmriC4WXCDZI2Ndx6evA0v5pjE+p5HuN1o0IJFtfiaNqFLXd8LcyB5SoC2p\r\nwTHJemUlsQn/SipWWlb0OWu6yLNhT4VvZs6FUd+WTyzJGpy14d1jn2McfP/s\r\nrrvoTY5d6O+sxOaQ88B3gGsQ4begbBj2xqFgr7inso0T3IUbzdm5cPTCjJ6A\r\nKW+36vp7SU585z0bnulEZ0Um5zb1UcUiKj4=\r\n=HC9I\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"ef0fdaaa40dd51d2898fe3987ff5f3f934cf76db","typings":"./src/index.d.ts","_npmUser":{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"axios":"~0.24.0","react":"^16.14.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.51.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.51.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.51.0_1649893009054_0.6107495620105154","host":"s3://npm-registry-packages"}},"11.52.0":{"name":"@brandingbrand/fsengage","version":"11.52.0","license":"MIT","_id":"@brandingbrand/fsengage@11.52.0","maintainers":[{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"3b2d45f4d281ae30a5a23df4dd18db7cef204b06","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.52.0.tgz","fileCount":111,"integrity":"sha512-u14UValFLaZ1SMJ4U1ls1lOf9iFmoyM/kRWsDvK05ReOyVYiz7mDOrWwdFD/WK33GvDm/Z2D3P7J8AXaOKK+ig==","signatures":[{"sig":"MEYCIQCYYD2xWRSuxowTQvjxL7HvYhGINd5Fq56vV9AvpOtBUQIhAJ7AjyCpnlQ/3qrBzlNnNpveR5wuRUVE7xg6KvYYSZt9","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":267918,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiXc6pACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmombxAAhe6NAtyXrZEoEaS97rhle01NuO/WjZuwqaE7I1YPPtStoKZV\r\nzIrPyP8SNpJX/5ii0GbsBtLQu5GBmD3BLkSteEosOSVS9i1g5XIWqpBQJUwi\r\nIDUTuAbjoVSb7FyS2xUhwxlGAO9yYeQu14ihu8OHz7Senitw7YHYRN+OkEaQ\r\n5S9JVQZPJ8PbG0deiqGYzkvnbp3CowiePqdJYmLuTY1nROL8tsuGzbqagvY0\r\nU2BH0zMpzahWckCgacGGY2XlrfgLfnngK6zbpGOStvb64CXijcadqQllfZ2B\r\n0kNfWrpMQ92qt39bmcpf/D/jd+CnpNNk81321u1Z+I0jl5NGtXASyaTvyVmZ\r\nWJxK9jwoSvPxwpQlSlBer/pJQqyJ6bYEZwe2r+Jc1qiluXQnGFpGVEQtjzXK\r\nsa2ZgHH16dGIwGtu1v8RiF7iJKcCCDT9ZTv9GcEhGWMWOuyGWsGGAfK/ukZE\r\nUJsX5GUTCWkJOv5f9SkzToRWUhsb0GGKNn6IYouX+bEQIoNTwr9xZB0AcVTk\r\nMbx5Dm1rEIBCShCN/dRGm+9sTNZOnFlmYxIcNUiwHL3QYkNwWOwSELkeOg0o\r\naVnPs60IOBnZ5cnq906JDyxYx4CcOAi/OJOyO4mfRwc9Lq4wSb34sl0CbU+c\r\nGiJ5LDmcmYiH/dwjdu5JrEIgb9PGhXZ+Qf4=\r\n=goIp\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"3f3a59e9eaedb393509133389590861eabe446f0","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"axios":"~0.24.0","react":"^16.14.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.52.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.52.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.52.0_1650314921641_0.7092865078277737","host":"s3://npm-registry-packages"}},"11.53.0":{"name":"@brandingbrand/fsengage","version":"11.53.0","license":"MIT","_id":"@brandingbrand/fsengage@11.53.0","maintainers":[{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"769fbca98f42ef3fdb9969bf200e645549e88938","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.53.0.tgz","fileCount":111,"integrity":"sha512-4sVYpH6pag18lY7LDv1FJ+Ot95Gasux4Fl3Y4eLMY8C5LtxOIxsfOR+BAbp1wSVTRwvNJ4Saex2W526A+4Aq6Q==","signatures":[{"sig":"MEQCIEaUDQlR8qyH1YdGPDX7ZV7TAmseg2/GH3MKWZl7bjX8AiB5QzEiw0VsWVHs47ZLLG++Ba+5hPG2u/sACpwB5JKScg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":268017,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiX1DTACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrBHA/+IrKzq4poGewH0/DTQ3PWBpYpPGBIcOUJD3kCTSr6TGXr1H7X\r\nxO/68nwQlRpR1VH7qSQiDh5mIkv/PeWwMuwFh9nZDntLI9OSCpeFp/myHUZ6\r\nvvsXQxhiOSKHDCOkEceGPJ1JRgjPWBN6cGmuc6Vrw2Qm4bPGOFgVyGIV/A38\r\nzWFWu0ccZIFMuOzRCy0/8ZxYg2liZ769L1q6jD4sqfJwFOdbAjssJbzY5P7c\r\nYfX4g3fOjUujnv7prtJWmVTfXu9KddtXEUf8TpwQwY5W98stVoB4fsuebigR\r\nAVHQ9r/yKOTQe0NNwndoXlCQY/jtcgJeK6op0Sugqk1qz58mjCjNT9gAjCj8\r\nHbCHWzeq7sUXXiKImL8at6Xp8E2c5KEaFHtf3uJr+Qaj5OVedKCuamJiprEb\r\no+DmCY5AWiRv9abeEQmPtf52N/3+sk9ioEEfHA97Klh5mWT16FrCK9qKoakV\r\nPY3bdpFyJ8dBo2zU4AHzR3IDUnE2MdFS7CCryOitx85zJuTXaT4e73de7G2Z\r\nvWokxBQ+IMMBSDXkNvmPkpGI4TIJIJBA2sEiesjyZhi0Algywxcbk006xtGE\r\naBaCl70TaSCMyjk+mgldRwV1kr6Pcfilt144oTqCq/ImhzK8moTs3ccIVp4o\r\nsa/Dy4l0IveXRWOzy7/i1BsnlvMvGqn05zs=\r\n=kOCN\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"80c384d6307fe7920f489dd98373600a3dee0d39","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"axios":"~0.24.0","react":"^16.14.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.53.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.53.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.53.0_1650413778859_0.21628234287285064","host":"s3://npm-registry-packages"}},"11.54.0":{"name":"@brandingbrand/fsengage","version":"11.54.0","license":"MIT","_id":"@brandingbrand/fsengage@11.54.0","maintainers":[{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"ashleygerst","email":"ashley.gerst@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"},{"name":"kcarlton-rgg","email":"kcarlton@ruegiltgroupe.com"},{"name":"spo-cmoore","email":"colmoore@ruegiltgroupe.com"}],"dist":{"shasum":"3d3c12ae25eeb26b9bf0b1f1c9423b934059ec7c","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.54.0.tgz","fileCount":111,"integrity":"sha512-mqJIFIy4KYxoQsy5bwKAeflZoDw4YlVq/N/s+CAGkIHfIMKmlr9gNOegfMAV+kA7DVfDX/720VOGna4y+K8w2g==","signatures":[{"sig":"MEYCIQD5fF69zsYMwuAQUz1Qlhi6BpHjmPA2vqeW+CqcXh80wwIhAIlY+oApcCCkMxJatNbg5fs8HuY2WyMICmGcsf0oehuo","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":268139,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiaYajACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmovnQ//TLzaL8dRhIiWZPlCCbxbpOs6Z6Z4eiiDuWUyMj9Hpx9rxFTc\r\nRJVSHarabPG+lkvxFEew7nGSjqvtEofy7fWAisXbFQE8CD9JprjPUL4A8Xse\r\nAh58fY7fDI7Xgc3HR+1mQgFVmEZFOVeId+Sro8x5N4UpiFa8vf86PirsHQb6\r\n5JPrnWidm+aWKYwZ1DFY52bY/UxgEpQ++VDGRxSk6XakRO4eMr8fF2O7yj1W\r\nQY7crC5TOC+PvZ+u+xWSn1O9NoxV7SHYHmLH1UQ3gVwO1LHasTfjxZI4+e5n\r\nKiWv2t4EOyf6PiMbLACWWR6wLa4znx9rSN+5pPLq4dRYv/Te68nKNdyEFWg9\r\nUK5vo/DUb1KCHlgZTJ1UVaImTXMiqk6RAYwuf5SEIEtCZmYEkiJDRE2m/OHp\r\nXZKZRVJ2TwNW38KMoUICjbSMMZz4CIix79+l3DR2QD0zCN2+oMikF84tt+Ru\r\nqEloQSK38Hd5g5v+Ad5PxKIL4msE4G+BCv34cGC8kIp5gOwECnHN8VtUB2ed\r\ndbEJt6j392LXipgq41esBLa9dH8Jp6tTmhAExwwHX1E1DpsWWbuErB9GcvI7\r\ndTIoAP5HlkHQdUnLCOE9YP1c1RAgBIbKegQjtE9DSrl3ETu4zuAYDav0I6de\r\ntjqGGYQnHQkJWF7dje7M30VkCmSK6YEUS9A=\r\n=v5y0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"32bedb3098edf1d016799d99903366b5e8190d16","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"axios":"~0.24.0","react":"^16.14.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.54.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.54.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.54.0_1651082914822_0.6570957909018429","host":"s3://npm-registry-packages"}},"11.55.0":{"name":"@brandingbrand/fsengage","version":"11.55.0","license":"MIT","_id":"@brandingbrand/fsengage@11.55.0","maintainers":[{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"f4b2fa0b858e88d61bb1d4801ada413aeebc3201","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.55.0.tgz","fileCount":111,"integrity":"sha512-dgR6a4b/Xpler6iD95Idaabn0d2O1RZHa0Lg7VvDs87DkasgR6Eq5Zk3vyX7ziDNMc/k1NWUmgYNvVZrZFRhyw==","signatures":[{"sig":"MEQCIAo4wksVreU5DT7P4q08xvMjZEr5Sr54dqcxarvzZe0jAiBPkL/uc3cz0cB8LF6Q32tzOQpxM3MJDq1o0MZ3xSuoUw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":268337,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJibBBYACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmpfbw/8CrPRLw+cjse2GC0rm8en/9wSBnGfueaTRWsdZvAEaDrfG+pm\r\npxlxTt3i+86qfTeedW8Ey6v8brJkmOHxN6g0yj9Y94hPItIRO4LiPZnDPtL4\r\nByoWGbmf4T/zIefR2BG0tY6dKtMj47ZTubE7NhiAeOAAHRDgz6b9COn4MfrZ\r\n+nehLTzQwOIv+qTvBSVa9R2frsAdyhJ0G76DA9AhQyTWhzew8KkBOLojkN0O\r\nMqPxqZWhQXdxNpPrrBGj5fAZ6BTkYsvEWpbtxQP/hPBinpSeRKBo22g1kXYt\r\n8QvUvq6QvqymQahOqIGz/ypFnw+JMOoZ6BivlS2Y6scDDcyGncQFCaGlbggM\r\nrxyXmuvscZiivY8mEC3LT7EfvM2BDdBUdcPKFvqn7p6ZfD1kI6cvVZekD0iX\r\nkQQb0RSGeh5528gO9Z3BBxI1ihyvZvim+9ZtLmmSmymHzZiIaPq3EAeiTko7\r\nDbvjyAQpv0HFpVJ/4WGm8JQt6ABmANSSm6puYIcSW/1NQKWqYf62+eo7ZyeS\r\nVu2R3GoXjWkL9a9MRau3i1+tAWgIVxIVt67ZtpFKdJsre205/2OMrs25cBAz\r\n8RxbQgFGTOA03gIBHbXsJDrD14zD5y0t3i0LG3el51BJ5lFHVNLjuc2mlCT6\r\nBltliWG8Ehkag7ikPvJ4r9AeKy89jplBjJE=\r\n=Zk0/\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"4c03002e1137ad97b068616b64b8c37735caaa17","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"axios":"~0.24.0","react":"^16.14.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.55.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.55.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.55.0_1651249240182_0.3994276039062996","host":"s3://npm-registry-packages"}},"11.56.0":{"name":"@brandingbrand/fsengage","version":"11.56.0","license":"MIT","_id":"@brandingbrand/fsengage@11.56.0","maintainers":[{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"vyy7gn8j297flmyqgsmb","email":"josh.sarver@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"945357fd0d665d242229724654ebea42fae6efa2","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.56.0.tgz","fileCount":111,"integrity":"sha512-MiNgok+rAsA915ChZIs78IRFRAaK2R3M8myoSTGESNarDpr2YvHGppNhagF+eFKeTJiQIpMEdVomJYv6mUc6pg==","signatures":[{"sig":"MEUCIEkfQlW/JdEYKZfYsNNYd2AkPOlgWijdchfjJpI5ujI2AiEAvS3N0OiSdvKst4//RzZMwEuUD+UlIGzWLDEZHf/kiNg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":268337,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJidCoYACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmpbsg//cHgYPtVZS8ezK3kmHwdubudDKO1kArptZRkNeT/v71In2Vxp\r\nG3zgtAI00xlkg6njTu0RjF2MxOvAV30PG96qrHV2DfIG2nSjTQtckZKVg927\r\nMP6lfiv45/gmjlST6ij3ocNI+VFl0vnmwxBrSbFT8HdVun3UrYZ18JSVaTGB\r\n8mIXyejYm6muQ6iG5ERheYSmPEekPgeFj1sUwMR9l1iN9UvBGiMZeEIL2+YT\r\nLQtCS85LTEoEHQtdnj5uprG1f7b5FQFDYGB2pU/yiWPienPVpGDBsC4jGeuE\r\npbSzxkfkQMZ0DA6ilYkKolRXSjdiAfwNmVM71raCU4eofXy622/LraVBY5qH\r\nH5IHQvQft5muSNKHAQquHHdderYefWphWKtaSI9muIcO7LSmEQi/0lys8QE5\r\nEUcnhCudUv+0myrsLNDH+WlPDIp/opRgKHdMQ3dStTDjYl/RYlDjom4C5wps\r\ns8SibE1hHF0ioKiESDSWSxvmP3aBB93G8ExrPiJA+nO/yLaZxYxPB1MblWRE\r\n0CujWvpPH71tM3fefmBM0ysU3Bb/CMqfb7XbkixvieMQ6xthrAngn26GMFkN\r\nTD/572yP2tmolXpQDcBQ0kD+JAyNaM0s9h/VX+mpdcLUuJzLPR7mhdlY5fkl\r\nK7r7tcHUg2/wFDhCdxDdCD/SIB8Uou2P9OU=\r\n=nFJ/\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"10919a431b2161ca793c7b4c75b55f40d9c5b3f3","typings":"./src/index.d.ts","_npmUser":{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"axios":"~0.24.0","react":"^16.14.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.56.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.56.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.56.0_1651780120348_0.47069372234665807","host":"s3://npm-registry-packages"}},"11.57.0":{"name":"@brandingbrand/fsengage","version":"11.57.0","license":"MIT","_id":"@brandingbrand/fsengage@11.57.0","maintainers":[{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"437656c1f7a6e3fe57b67435cb0498a170aead94","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.57.0.tgz","fileCount":111,"integrity":"sha512-4nAnqeylYzCwnAyzabsZpv8Ov1cr+OmmJZfiiSjDvePraBWFUh6oJiTm5py5Sjy1SFqmgQSOb3dFvQqY/3EoVg==","signatures":[{"sig":"MEUCIQD3IPgfG6NRwPw8Ee5pMfmwy7tJUi9LaBamnlrkUGMOyAIgI9LBDLv5XvX09LKBxGHLj6TCyDWZgyDrwxNXysGb7wc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":268436,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJidY8sACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrDrA/8DYG8Ef5Tyyu++fwqhntjYZYz6aLSvJEDfahMgRfv16He8OfQ\r\nNQwOo4CgwRp1/6pic4EJ4PAS5+STN2L7JPuwG5eUrnBeTBSuoqqwBeSUH5bE\r\nmLxhGfFJqSc/wqPetF/QczjSHXNsLvXLC3LVPfmbr+g0OAcznJYYoENGoZYq\r\nJv19prUGmHfh5vdK+1Ywrgs5abe3zHa2zTcprOetbc2FSDIBQZKRFyHDLbLf\r\nK8Gw4gwn33nj/eGtOuef6HU5uyBdW5/FAPmqUvNQZaiznycYeR5dskuOSvRJ\r\nvQ4oRrOROZnOzoqbI+Bgvswwauo5QJ9HMDhkfMf36BUKBrGthn+v0DiE8hFx\r\njM3zrMN2/758oKuHChPH0edLFrS4riCO37nOHR2BRYLRr/jn0TckaKFTVg5k\r\nksk7TCdA9iKT/h6EYMjnOMy9wZAB4ngECd+E0sNuQHbhKDzXFo4u3PWI6CNt\r\nrGNdxdJ8E8x7nrkux/r5XCt3PrxiWq3c30K6r1kZT/BJ3KGrjl3OVRW6reVs\r\nrVdVorVopxsz6RRUS+fQ3kPHJS3m7MvWPzE7ojpm68OPUQmEGmZy4cYxvAL7\r\nhgcCPlj+Jh4e4O4H1KBCqr0k8oyVbS2P3B+nWLB4kc8G22ddbrWoQMlOnH81\r\nAqgMv+Um7r1qoji4qFJlIJnrUikz/m8Vr8k=\r\n=nad2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"72b6fb9e454b45e003919fcb09115a01e9a61faf","typings":"./src/index.d.ts","_npmUser":{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"axios":"~0.24.0","react":"^16.14.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.57.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.57.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.57.0_1651871532574_0.7019412405831131","host":"s3://npm-registry-packages"}},"11.58.0":{"name":"@brandingbrand/fsengage","version":"11.58.0","license":"MIT","_id":"@brandingbrand/fsengage@11.58.0","maintainers":[{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"313f9576279a707838c2578b15668fce13faf7e2","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.58.0.tgz","fileCount":111,"integrity":"sha512-CWW8A813lJAA23IMr72Cj0/UEXYFuodJh+4R+rA2bOUloU3fz6QQeFEK0VWbzJ/8FlucnlkW2W9hVbrkedpsxQ==","signatures":[{"sig":"MEUCIQDZmLFfQ/7l0iK2gcYkXaqJ5Tk/YQOdI48hO5Zarul44gIgK/iUDdTlDvg1Tk9ZXsVWFIiFt/dTKkOF4Suj9W7L5rA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":268535,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJie9SPACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpX4g/+KdPrELVsCqq4agN9mtcA7M3sTkm2GUnE2nfxm34SplAHpKVY\r\nFq6QT6zS5BsqxNKdysqDxF8YtjnBjzdMVrj86lAjGMykvSuigvcud3/c0uRz\r\nDQXx9YE5izaoBnmyNm+bb2dJ5z/8ML0Hzxp9494NQnL0Ht0cyVCOrc5ZkqDl\r\nw7bnYJ9vYTXoUPab5CSKr9vPOr85VB+PI14hwWHzakZ/w129Iu4OTGyad7y0\r\na0GveWW46UGzAcW8Jv4+tMbdn0g6l3PPq3gKKouLvwreUZLrVrRTvj1J6OiI\r\nzo++9ZCQJJmAPQzZsyo4+4pSmr4x1iQHcgTFfYZw6ySz0Pyl6QYQnsBVkcVD\r\nMDLYd9LVzU/kRtKh69L4OcyDxJcjg4GGhdLXrGgn1ads2HoPVFX0q6f53zNu\r\n3VZNIUoAiSU8dc9eFwNDY8b7EzqvxkXfnK9Gmel10ScOQrLOO3XjSSoK6jjP\r\nwAw0UQznUQIYHKLjogs3elbRAtNwL21lT/9udff7ZektVbArXIaZPeAUJFnC\r\n0ibJYIypDAyXkVuf4RPmRORwc21SEquH7c/60vMchIR7QRqrsV7xQnuIytH2\r\nphRtgBcs5zsqFZtpl3mdhgM9SxIOyKx2scVGJqJpRq0GXPcKVJCr9X/P0mma\r\nWyMQ+vZCoTbxigaoVcsPXFXdT7FsWNKT6U4=\r\n=cPNu\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"fd9f7fc778a5bb20fa4ddb5ca849879ea893e1ec","typings":"./src/index.d.ts","_npmUser":{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"axios":"~0.24.0","react":"^16.14.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.58.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.58.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.58.0_1652282511388_0.29680798899152405","host":"s3://npm-registry-packages"}},"11.59.0":{"name":"@brandingbrand/fsengage","version":"11.59.0","license":"MIT","_id":"@brandingbrand/fsengage@11.59.0","maintainers":[{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"e342dd5ead15a87c9fce369250d0c6fd974a7ce7","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.59.0.tgz","fileCount":111,"integrity":"sha512-q//QBzq5/vZRlmnR6SKQmidnhnd785HpM0UBJcKSs8zfJr4gf0oF5Vgg5fZUCmWDqbOHezSKhWf1A0LQYnEeFA==","signatures":[{"sig":"MEUCIFSVobv/G0k9fbdSoT3vt4HoqmhER9vGRkCwoKdCUN93AiEA9VVPR0ZwDrps/gZHDbqAf8OoMdFaWAbSRzh/ipwSg+4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":268634,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJifWnLACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrZBw/+MjP9p8XB/c2aGmlP1IvfdlCuwY70YMDQ+oYHDd6dfQX/Guun\r\niT1NaF2MzMkHgAU8QhmUc0cRDaaFeY6fg6n8SNI0G4ZuAfp8xkM6nVKcjqvL\r\nbpVrLo76ReOd7IG/+QqA96/DVI5/KbTazwVR1VcoJ33Y4iRT1jfvvYhQF6x8\r\nL9ZKHJCY8QdOLV9ZLbsZbPvtk9zCFvR1kE0U20sOE7Dk84PIa31wnN9dvsVZ\r\nQ1ft1Zm//oKndrDHa2SEo3NSWPefIw3187jv7qjWAV9jL6nJH9/Y2SppWSmE\r\nGOVEaCM4FvsMqwty+bXIvI40eC5lgnr//Q6/OX+gPlBk7QU5Xi6ix6dZ1Ucx\r\n6cMPwt65lsWgUWhmFkabucv4ts9Tfv2RhYe8HnTYKl0IxXPpXW8usRCaCO58\r\n8nL2GwIiTxabBxEnn3v7Jk+AOjv2lxMCUMzEOgAVhYCVyJIPJXMAD/MsKe4J\r\npM3ALmNYRyh2dKjDUe0ztPXt2J6Xms7NSEsAJgYwBOZmr2BaZ+Gn4Ap4P3Lu\r\nABMEWdh8hCmpa6V+ZbJhP/YYB5A4o8f57ZlbmlzbYAS6qBNpr5M9+PauxlXy\r\nWKKvHiP1aXW7pRnmNi5MQgYmwbUZnBEpHIFwQlPOcPXW4t4dQj9gD7xtsKz0\r\nCkNjDcM2CuLug9TvpM4awS09+STzJEsiEdo=\r\n=eW8u\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"d266023e41a3ca5cc529776402de2c47fb4c5452","typings":"./src/index.d.ts","_npmUser":{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"axios":"~0.24.0","react":"^16.14.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.59.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.59.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.59.0_1652386251840_0.710303282106409","host":"s3://npm-registry-packages"}},"11.60.0":{"name":"@brandingbrand/fsengage","version":"11.60.0","license":"MIT","_id":"@brandingbrand/fsengage@11.60.0","maintainers":[{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"60874d3a9b5d059fe439612a83b1c13d039ac6cf","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.60.0.tgz","fileCount":111,"integrity":"sha512-eMmq8WjKM7JN7QTub5o4221skzVvi3SBVqpt7HuQZ2LrJZSUBzYWp+zuU7WNTGYXanf2vYPH7iBwny9hY+I/Xg==","signatures":[{"sig":"MEUCIQCBXu4SpYzbS2qM0d80CTkNyads9JNmm+zSb2PBgYUAIQIgB3PomyWICC5l4H5Aj1pC83S8IT/JHqLK8mqnNIiJISQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":268733,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJifXXtACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoTCA/7Bb9qUts5hGMW6pePXIIzVOBqvMRcS2rp9kzSZL0b7njh0SXk\r\n5LrBMzCpUhsQsgjrniNQPoEiqI38JzE6vOwFgXJMEh/CIxo78RXdI2ombvv7\r\nUaowDQtR5gxaELPdOngBlDyR8pbYQStFqbLccwR0b25v4ggfmBVl/sRlCUus\r\nycMx6mEM+rUFaKCbsL+mJqMzkK9XxHKSlkPjbjhbF3YAKseRxRGj8oG4CyUS\r\nq1s7vo///gyo8EBTSQx+KO/f7cusgJVAYEyYDcoCk0kRyzJ2Xdn4mdKV7PfO\r\n8d8uJZvCvB0AtB1keUEUxXhAR/g0VDJV54O1rdrmcio4+kxHAneQbddOOV4c\r\nJD1AeiFbDXAfJvvUCq8jW03HEWe6QsWQZNWNXEAsILopANVWOzWDDj8eEsGS\r\nQyAbfurz9I51F5Z9K+Vy2IvmTskynORas1N4PDFnih4KdDFJFJ5HB9UogXuL\r\n7sc8ek1/CKNCNNoKgScm6hjR0g+7WSJ7NqhIxJUvTPwQDCH4FYUzfnkCArr/\r\n4niuDjrRKtFU+qqIymEM3k2F3kta+CPRLfNkMNYiTNUK0DQ1RLbUinJYvwU5\r\nwS1R0ekRuJbno76VVDduI62tL52GCYbpitWDB2u2VN51r13eLM0uNrxrFLlc\r\nkqOCC4OQs5Y+tUHh3D/WkaysWvK7NMCoNUU=\r\n=pwBD\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"84f6aa0238acc8e337a33bb45182181fa219a826","typings":"./src/index.d.ts","_npmUser":{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"axios":"~0.24.0","react":"^16.14.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.60.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.60.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.60.0_1652389357414_0.29306658905262584","host":"s3://npm-registry-packages"}},"11.61.0":{"name":"@brandingbrand/fsengage","version":"11.61.0","license":"MIT","_id":"@brandingbrand/fsengage@11.61.0","maintainers":[{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"b62aa6d0c6de0132a16fedfc7531ba761ebbf5a8","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.61.0.tgz","fileCount":111,"integrity":"sha512-bq3CVI2sodYUOBtFTdAWw8PQfpr+6985RAiPELQvygJvTs8eq1MwaUrCfQwTZ64HPpyObl5xCnyvrW/GyRPNPA==","signatures":[{"sig":"MEYCIQDv/WmcEAYXh9WMo1YH2OPMoe25QaDpKSO6hHxMdGthgQIhALs9qk4MXf2zDN4wlPvyWYCpa1gNlhQ1RXTaGfPtuJXJ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":268832,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJig7isACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo09A/5AMbDIgXonhNoMC2avCMqLfqYN3wuV7lLUgJH+MjLnWVmZyVs\r\n0HqvGh7daNGZkhG5u/6wVrkt38AZDHNYzv2VKbHc8AjvU3XxqPCXtNwSoegg\r\nOm8GyJLI33iQuwLLBMvfbEDuJ5F9DfeK+GiyaOFg3U1zcMBnxcuCOJ1mZDq4\r\nNmmA1mXGjuHfAHWPum5/tdASReE+QkHI0Jt1LPa6po21uIbmQDXNB5wwJBxB\r\nsmrbiH1aLL9+8ESkTxDyN/G6Wj1GVfr3fbIvAPWfwBt5gCEnVWkkGAtaUfzI\r\nsiS6rouytbV775RCdoAlOLuxUJ+Vrejgq5OI6Rb56GVI0Mdwf++sMdPq+fTl\r\nv9EWMeIAzl/mxG71Q/h1nMKFZY+3JRBFKFDtj22LPeIG7n70ayeVwVsifBxZ\r\nZHPB5DulMnHa0kTgLKg+WnRkuDJDNU0ppTi6+FnPmLvipP4nvF7JJmSH1T5b\r\nBQskXGQzg+u4SlnlwXli/QaqVykPnkwx28tMS1iXbRF3/UPUagJcrlWetoPO\r\nANMvGLvb1HL7Z9J0yxUI8HZ0JEu2XqL1cgvyOrx0Q3nNn4vbf7V/j/WUjsP7\r\n7FlPbIXTgwsRO5oskebtIoFe0wy/0FPz/1yTwGDzrk6Ecs1UTsBXZpme8Hk6\r\nCQZMBncfeAUJIK4XlGvVs0IX86rWNA2gHdI=\r\n=B4W6\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"5fbe01514403d1543f6d4f429862e5a5594c9915","typings":"./src/index.d.ts","_npmUser":{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"axios":"~0.24.0","react":"^16.14.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.61.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.61.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.61.0_1652799660455_0.43587267330425905","host":"s3://npm-registry-packages"}},"11.62.0":{"name":"@brandingbrand/fsengage","version":"11.62.0","license":"MIT","_id":"@brandingbrand/fsengage@11.62.0","maintainers":[{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"3b008caa660c8904f2d301ecf71fa98e02c67fa7","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.62.0.tgz","fileCount":111,"integrity":"sha512-fS7gkpYRu5mE5I9M9R9tsNW/VO1BfufC+3n+RQ0RUfCQ6s29Zv79nbI2ofX04hiE7lpwhSgiSsSIwqLNCj9ghA==","signatures":[{"sig":"MEQCIGP/fAnaum4bFWJb6F0sa2ZF6f6nFWdBhlUh7vE2r67ZAiAyy5c8MmGUw4Ku1O2J+Qw3vKhX2fI9oDMTlBTX/gZJKg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":268931,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJih71OACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoTIxAAgpeIUT7RYtZVLjOULi1gSwCGhKEmnjQBdkwqDZU0TxTYKkut\r\nrmPPGpyim54trhzvS62vCnAFABXaH9nbo4NJEQfwxF0T5tuVf5nGmV1Z/GBG\r\n/SMg3NnG0OMI1fZ6KGuh9/iwgnMGz65jYqOXaxP5PKvaJJqyvhzA4lfOtB7K\r\nMZ+zySb+p8cQ7hExHJGvhWxsw08Dd1xWlvI5HsT/L5zNPQ/XxjCXYNvLKy+T\r\nBYr4TR88j6ANWzlX8VAZaZbggJ7vWX+D3x+NlzMyIdwV7DZP3JdrCUhIfwGd\r\nxWgG5SP4385BmksKaXABnVj+BTcyUpvh0Ah2knEGF613rRmltyUR3OzDKykK\r\nmE3w2KvShwFvO42pCPnBY49Isb7ZPGJWHv6wov28O/rmYQwQHS5oAVGfpQQC\r\nvdSAeTgXjIuFtmJz4RwX64WV6PTUyT1x/m2+1rpVblbtYKiDYIltxmz9fRJb\r\nyLInxRbVqMR/P481h4K7tZa1PDYd0VhZYpaokV2NjcKkXih701CjJAMsns4r\r\n8VJZxTQxUANthU0kn2dd2GV7WhJIUmiWrqDTaNUgIvN9LMHfjwlh1ayvCVHs\r\njORQau/o2JvBNr4S2PQKfzogM3X9jqwgYWkkfBoNohp7b2pnqtSlKR+PODQQ\r\nKNygNhN7n/Ur2udUbC+ygRJYpUSfrJp78f4=\r\n=OGz5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"3504f1a01af770e682b48f2aaf3b5eead222248d","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"axios":"~0.24.0","react":"^16.14.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.62.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.62.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.62.0_1653062990071_0.5471233751924613","host":"s3://npm-registry-packages"}},"11.63.0":{"name":"@brandingbrand/fsengage","version":"11.63.0","license":"MIT","_id":"@brandingbrand/fsengage@11.63.0","maintainers":[{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"5bacf6c77bb5217c4edad711013b643f2959f14c","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.63.0.tgz","fileCount":111,"integrity":"sha512-+DHB9ObEk+vOXBIqrcRZQi5nVgYjsKTvYaqdxHUb3iRfMIpwk6U1+/JnANJFmN/QMq5dLyMCsjOMSCi+TUyfrQ==","signatures":[{"sig":"MEUCIA3lb5bNEjKPN7br+KVGlPZlzmJhCYbN5gIJ/YpKaaw9AiEA726NlpRsVC7xrAxLPcXizF0tiHp01ocJ1li5kFDK4ls=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":270559,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJijnM/ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpDNg/+LjKNauD2rzfbQBBEMB44clz0w5ryFJQXojp3KBmiuSzEj91J\r\nKHZ6wGWISxhwq5f2v+OV76WIgNN3SgNugcJIrZ9fyvmfNapuFPmtAi5bHLsE\r\nFD7g4Ld1b/fTjULAeUPLJfh2eShj8a/393S+PjQ1YiGoB4yIXjRwvG+UnciV\r\nB9OoqGT2XPoiByiWMAnazgPWVOoIzHZMAULSmUVyIHA7w1HHCEBb34X444ag\r\nogAq9i9wWZAw3n7N7/ClM6WWFNvB/gK3wlch1f86jk7glCeHvY6GwF46EgHv\r\nqGNGwnXJo3UzcxVq8MFIbzNcS71CgwhNDKnGl8gW5RaOARPmYXsH9lEpNhkZ\r\nXN8SWJMSvZM+oZ/gWQVgmfoQjplqKv3vObHpu7zD9JbKQ04ySEglzXSxDxC/\r\nfuSv9HIqug/s/J18hlNU1UiGy8rmYgkfzimK0YMXyf1SpiAcJwbkgw4GjIpT\r\nULJl6kwYPoP8IC5rUCKAOtVd+TiQCxtLKfOB2x2DOjAwKwvIKCbjYJd+sG5M\r\n+JO89s+AUgh3rRPbpq5TygN4ZjFwNTHzjwkgYvAfD8N2VYpSY+fSENjfXleO\r\n85RJVVHA69OuLdZ6dXbor7vOYE/UdWkNw8BsenwX47nUigfpl31yKtIjszbp\r\njNeULhfYPwaTV5f313ux5+vN0s5+yEYiPak=\r\n=hKAb\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"8c8eae2e212d6ab382379ac18f89c6a000284fcc","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.19.3","dependencies":{"axios":"~0.24.0","react":"^16.14.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.63.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.63.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.63.0_1653502783076_0.4394785675630781","host":"s3://npm-registry-packages"}},"11.64.0-alpha.0":{"name":"@brandingbrand/fsengage","version":"11.64.0-alpha.0","license":"MIT","_id":"@brandingbrand/fsengage@11.64.0-alpha.0","maintainers":[{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"70314c6b8dca8d7faa36798f2b0405890406c1a5","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.64.0-alpha.0.tgz","fileCount":111,"integrity":"sha512-u+qzLUKKxsced3kh0tuz8Kdm4XuJ6r60NUAcCaSOP4FtQUU7oSorcKkMIma8FFan79lU/naCkO8qGuhBTQ3ALA==","signatures":[{"sig":"MEUCIFwtdk4f2bwTmAOowkG9/BjtMZB1T99aZ6EiFcBEK1OwAiEA+XLimQBYB4lflptmPUC3SRixOYcZa50yMhL+AUWtQPI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":270856,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiud4MACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo54g//egsYUEHj3qTw+LU/F6vtKdZ2rbyRzJqvWNotqMIAr41vYGIp\r\nCyo97JXid1HyJ9SXd2IraIAK0KeLMHy+I/WC9mVSiyP5b2yJ9xVvsJ/O5kWO\r\n5DRc6U1/XSjMd3G0KKe8cW0wGYbXbAEYaSS1sKEj/wtQpViIO3cGmlws7zQt\r\nTFydqoyz5/oJfVEUdm7u9uAnv2Winuz4P2r72TowWTcDFbzqAB/ifUAZmtOV\r\nTBz/cosCaIxGJU+cHBWHn0Xckfauy/vVsyrNV3iOqC7ZkairX6puE9ptMb0Y\r\nXxcqxLK5gQ0IaX44HHNpk3r0q7Uf6WJCQDCzLDkZGBYO+HHeU7Gz1xnEB4wI\r\nzplWACOx08co5tF6vvYsve7aEHabSjh95kNViic7ZDqSSpwPFFZ/9Y0DGNeF\r\nTxhxIg6cI7X+6Ztavk/WjQwJ7iIjXue5kh8WxuCiXE1IuMuzRebzkJfLVdEZ\r\ntGXEScife/tL5Zuxua82h8TohOZvf91BKSgSir3RWLyv8vzjTfC98af1mSa5\r\nGhlixu3xsPK6QBQKt0tB/94RO6lfxdzOJpkJF0g2oQCzkMdEMy7mLf7RXUD9\r\naOuX1Y6r7l+7owT22kqwmFK53i3CMyPxsNbb0DMacfb0x8ZS4cpbaS4Ys2Xz\r\nmO95YTrQI9VtyCAp3MN++ekz6vJQI/c5OXM=\r\n=Es/1\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\nwill support Demandware.\n\n- [Analytics](#analytics)\n  - [Analytics Providers](#analytics-providers)\n  - [Analytics Providers Configuration](#analytics-configurations)\n    - [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    - [Leanplum](#LeanplumProviderConfiguration)\n    - [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    - [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  - [Analytics Constructors](#analytics-constructors)\n  - [Analytics Tracking](#tracking-functions)\n    - [Ecommerce Function Signatures](#ecommerce)\n    - [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    - [App Lifecycle Function Signatures](#app-lifecycle)\n    - [Full List of Property Parameters for Tracking](#parameters)\n    - [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n- [CMS](#cms)\n  - [CMS Providers](#cms-providers)\n    - [Core](#core)\n    - [Demandware](#demandware)\n  - [CMS API](#cms-api)\n    - [CMS Configurations](#cms-configurations)\n    - [CMS Constructors](#cms-constructors)\n    - [Functionality](#cms-constructors)\n- [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n**Warning**: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n| Property       |  Type  | Required |\n| -------------- | :----: | :------: |\n| userAgent      | string | **yes**  |\n| osType         | string | **yes**  |\n| osVersion      | string | **yes**  |\n| appName        | string | **yes**  |\n| appId          | string | **yes**  |\n| appVersion     | string | **yes**  |\n| appInstallerId | string |    no    |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| clientId      | string | **yes**  |\n| clientSecret  | string | **yes**  |\n| reportSuiteId | string | **yes**  |\n\n**Note**: This configuration just applies for web environments. For native environment\nconfiguration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n| Property     |  Type  | Required |\n| ------------ | :----: | :------: |\n| trackerId    | string | **yes**  |\n| clientId     | string | **yes**  |\n| trackerName  | string |    no    |\n| cookieDomain | string |    no    |\n\n#### # LeanplumProviderConfiguration\n\n| Property              |  Type  | Required |\n| --------------------- | :----: | :------: |\n| appId                 | string | **yes**  |\n| key                   | string | **yes**  |\n| monetizationEventName | string |    no    |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version,\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID(),\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\n\nconst analytics = new Analytics([google]);\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\nand begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\nyou might want to add a click tracker to your 'Add To Cart' button. It's as simple as adding the\nfollowing code to your success handler (assuming you only want to tracks successful adds):\n\n```javascript\nAnalytics.click.generic('Add to Bag', {\n  identifier: variantId,\n  name: 'PDP',\n});\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\nAnalytics.screenview('ProductDetail', {\n  url: 'www.example.com/products/123',\n});\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| name          | string | **yes\\*** |\n| index         | number |    no     |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| number        | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n#### # ContactEmail\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| to            | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n#### # ImpressionGeneric\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| name          | string | **yes\\*** |\n| index         | number |    no     |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| identifier    | string | **yes**  |\n| name          | string | **yes**  |\n| brand         | string |    no    |\n| category      | string |    no    |\n| list          | string |    no    |\n| variant       | string |    no    |\n| price         | number |    no    |\n| index         | number |    no    |\n| gaQueryParams | object |    no    |\n\n#### # LocationDirections\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| address       | string | **yes\\*** |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| name          |  string  | **yes**  |\n| brand         |  string  |    no    |\n| category      |  string  |    no    |\n| variant       |  string  |    no    |\n| coupons       | string[] |    no    |\n| price         |  string  |    no    |\n| quantity      |  number  |    no    |\n| index         |  number  |    no    |\n| gaQueryParams |  object  |    no    |\n\n#### # Promotion\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| identifier    | string | **yes**  |\n| name          | string | **yes**  |\n| creative      | string |    no    |\n| slot          | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # RefundProduct\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| quantity      |  number  | **yes**  |\n| price         |  string  |    no    |\n| coupons       | string[] |    no    |\n| gaQueryParams |  object  |    no    |\n\n#### # SearchGeneric\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| term          | string | **yes**  |\n| count         | number |    no    |\n| gaQueryParams | object |    no    |\n\n#### # Screenview\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| url           | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n### Actions\n\n#### # ProductAction\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| list          | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # CheckoutAction\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| step          | number |    no    |\n| option        | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # TransactionAction\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| affiliation   |  string  |    no    |\n| revenue       |  string  |    no    |\n| tax           |  string  |    no    |\n| shippingCost  |  string  |    no    |\n| coupons       | string[] |    no    |\n| gaQueryParams |  object  |    no    |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45',\n    },\n  },\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n- City\n- Country\n- Date\n- Postal Code\n- Region\n- State\n- Time of Day\n- Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n| Property    |  Type  | Required |\n| ----------- | :----: | :------: |\n| propertyId  | string | **yes**  |\n| environment | number | **yes**  |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"8668b185e1684f6d842cbc83017cb01b546a2001","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.19.3","dependencies":{"axios":"~0.24.0","react":"^16.14.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.64.0-alpha.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.64.0-alpha.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.64.0-alpha.0_1656348172490_0.12475564137850159","host":"s3://npm-registry-packages"}},"11.64.0":{"name":"@brandingbrand/fsengage","version":"11.64.0","license":"MIT","_id":"@brandingbrand/fsengage@11.64.0","maintainers":[{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"578d54987da0f209e9b862834026abeb47367758","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.64.0.tgz","fileCount":111,"integrity":"sha512-BxdACc5TgTdDIdgS8mnp1ciKC9k0KRZ21ypv1TS9yud4+7LEg2MtxZocORmh7iqkVjMXzYfZ1qtsLEH3ABMy0g==","signatures":[{"sig":"MEUCIEro4BE+TMorEPmtumfPpLGX2W80yA2t4jRtFcNuTa3CAiEA/UUgNO2Lv7jDLsUWGLENa6RT9HGUNr83fKtjLj+OYpI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":270832,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiuijnACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo9vw/9Eewb590HecA7DoIQWwNf63gfaVuJvX5FvcC0fKdelucPLdtG\r\nMyBSlMqWTqFlP3PTAoSICu0D9baFrzcAsL/8ausHMxPUztaTmoHhq+E7Brri\r\nWwMJSQBNXKnP2e8sSUbIVqBsgLWL8tBjSBt12/NqrGZFzhg/VfD2TrDmui9x\r\nidF1+MMVvaxMpwhi6O9YX7EEB+yaDKdOu0ztfu2TE1bI2Q1UFBjQL/iGaahv\r\njzABwloq9duBJa6g9RtWz7/r7tXJxu171B++wUylmHDnSIdJeYytA139rin3\r\negjUeviT1mRmImwYL8jBR1i7OvfagIPoY4CGHHv4htsqQGFhFORXc3Ou3lM+\r\nJaOyLJ1H81SkZ0Wjz84yE/+n+ChjA5ogaOm5JJ4OjBQabQJMJ5VQLF4W9nYm\r\nCyCOvrW1gaQ0fS74/qp21E6qhUbXLv9z9MoIOSLjB9Wiwwr5cgUkwZQBmRLZ\r\nlONUieFoBw2wX9XnqqbZj/jNZF48Tss4qQ8+iA8gPvvOWsrNWtqP73qp5pju\r\nHfPOBJG4p6buRZUfuC9WW1b+1D0Zrxm+8ROjgc5MUubw0T7MOdSPbaWOosDo\r\n8Z2VcqVNWpkV+BWhtJVKkO7IHeGyBawYfBH1JgTs4SM+JpvOfij425Yt0Rm1\r\nq02hb54LWnww1P6FBUB3zma9NzZ5RPLWzjE=\r\n=uZ/3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"8668b185e1684f6d842cbc83017cb01b546a2001","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.19.3","dependencies":{"axios":"~0.24.0","react":"^16.14.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.64.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.64.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.64.0_1656367334952_0.16892171678377954","host":"s3://npm-registry-packages"}},"11.65.0":{"name":"@brandingbrand/fsengage","version":"11.65.0","license":"MIT","_id":"@brandingbrand/fsengage@11.65.0","maintainers":[{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"henry.saintjuste","email":"henry.brown.saint.juste@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"sjotterman","email":"sjotterman@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"c9e1efe4d34f5fa1cf2a999e1ec2b6ab0e89159e","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.65.0.tgz","fileCount":111,"integrity":"sha512-DCFYLJpK3JvXOSPkiAdyRr5b8twG7wtxZfDZ4mPvMjGrJtjUxeKA/b/MIW9YwKwJ64gNFo9YDkz1BgVFvhgRlA==","signatures":[{"sig":"MEUCIQDrt88PWh1MHSGuiIVCeiKNpc5WsoB7JkI2rAXANExJEAIgJQqprBTKQVMQga5IhGjQRbh8KUSp6IVjtYXjP1E8ORM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":270931,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJivhU2ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoDtw/7BCuo5fhTErVfEFk5GX9EmHtrB0mOAYoe+x9v3r5ZJZpI7tjB\r\n1bMRrDiNSNwDThDOUbMiJJW1IVyZFg7Gz29z8t9gN7oODnseWwQvwQ1f73QQ\r\nuD/SJIL1UnC7VaXNS5rN8O1z0cKullB0gSSHFf8vu816iDb2Au2B1zjJZM4P\r\nRs20gLzoAUskYgJZhH+Gt35VyhRkwhoNMAfkvaoLLR7r+KLsBgvdStxOneDJ\r\nqb9wj4lX2CfF9lswuclS204EveGgf98pQ6MBvpQYH6QmZLcI3QXkmYJZ2Ebg\r\nX53EA0HNG+rRDXkeryCtyl/bdxme+p32wbWHgi+yHTJZAQo0Q5rNlb1XDyjZ\r\noRwCFmiCQWT3goj4lum/scSbblQjTiguzR6HUqk2o3P4vOwHSUA7bzpyJJOr\r\nGWfSJsU0FucJHHjw9zrBeJ/Ue/CPVfEQvOaP/yFm6pSvZP+0TgRPMEcL6zPE\r\n4t9d013lAwVKfWCSwEnOOHCcmd3AENyKrME+CNIXYzYPNNJvdrp2Of9ZSpXu\r\n3vsRbro6NqPyhVZnfnt5ZuwyihM0w4nyTFBh/KuTStW2FYMhkgNeYckEeznC\r\nrL5Url4J1ei9xhuHxmcnI1DyowRn8NkRf9MMVRZT9XVQyyAy54eqKqAUAkK0\r\nN3myx0rGKAtnm4xJn0cM2WKlyr9ybdih5eg=\r\n=YNGE\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"ec785996b9c8329e4ebeed47931e3467135a3caf","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.19.3","dependencies":{"axios":"~0.24.0","react":"^16.14.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.65.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.65.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.65.0_1656624438390_0.7218180771403215","host":"s3://npm-registry-packages"}},"11.66.0-alpha.0":{"name":"@brandingbrand/fsengage","version":"11.66.0-alpha.0","license":"MIT","_id":"@brandingbrand/fsengage@11.66.0-alpha.0","maintainers":[{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"cboetto","email":"cmitchellboetto@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"dman01989","email":"dtwiers08@gmail.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"1f4558be629bc0e822433bcf75a246c5e6b20e68","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.66.0-alpha.0.tgz","fileCount":111,"integrity":"sha512-gOh4Csf1MuiT2J9p2uXHcbUZDSsSmaY4z2AiOrlD371SSYGfu8mCLKaWXF/TEbhxCFxQ1TrrSySo6pzyem/BVw==","signatures":[{"sig":"MEUCIQCWmQ7Yz4Z0KyR0ovpCITGAbqSWLGnooAfl94yro3CCSgIgWBbnI7geKrchmWikWuMby7UnVxPhmkK0JgQRJ20oUA4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":271054,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi0dBxACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp6gw/9FSfqRmFoGKl0kEOnR5ljRhoBidx2e/XxiTQds84rCErhdHen\r\nY0yM/ys8ApE/6XRLnIewg4zuhHAxknuMky2kyoJJK4xa0wBcEor+WCAmueHm\r\nQsBqPYupYn/K1UfZ5+uNmH8/fUxfQEh9CE37z19UOrcDqvmntJ16yoQk0t3H\r\nYm5HJf0NMm08v+zOh30kzJ3JVu4NBgZF+Ed9AOMoOA9GcSN6tY36TXH7HgWB\r\n8fP3vP4/nI1dCwZcjKbYfwUkU7YFfhyT4AyqzjR0Ld/nh346/g4RWe2KE4VE\r\n3xYvK2M/qRWsJCcnKCUEZ3sIayFWn8RiAUmvS+y3xGminj1Mbjqio/KYCNSz\r\nAsyAfn6L6LnPolF2JibvCh3Pc/6hJvoFy53v8st9AuQmgkwAGp2UhRUn2Agt\r\nuCoNT6sAf9wRXTq2U7YNRmy5ENT3fz4Xbt1qimhOUVvLRlchzqXWgUbe+nbA\r\ntl/LVj9LT2Vb1kBjWBXH01QLeU4A2RT38YwzOqJ8p2jgyHJ3d3hm6XBPcwL6\r\nNRiPvS3aX0Mwz7ffvyvNpfiMD9/QRkfQDGbD80FIhulfKoM6raXDLxqaExvU\r\nRVBMpZzNoM8rVUgS568Bs7UqNZdAuK0k5w8eJ/cvJXIGLHHv1RJs7UKcC5U1\r\n7RHqbALKwDS9g39NlOJrc/ThpYaAVg7Ba9w=\r\n=mPln\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\nwill support Demandware.\n\n- [Analytics](#analytics)\n  - [Analytics Providers](#analytics-providers)\n  - [Analytics Providers Configuration](#analytics-configurations)\n    - [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    - [Leanplum](#LeanplumProviderConfiguration)\n    - [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    - [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  - [Analytics Constructors](#analytics-constructors)\n  - [Analytics Tracking](#tracking-functions)\n    - [Ecommerce Function Signatures](#ecommerce)\n    - [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    - [App Lifecycle Function Signatures](#app-lifecycle)\n    - [Full List of Property Parameters for Tracking](#parameters)\n    - [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n- [CMS](#cms)\n  - [CMS Providers](#cms-providers)\n    - [Core](#core)\n    - [Demandware](#demandware)\n  - [CMS API](#cms-api)\n    - [CMS Configurations](#cms-configurations)\n    - [CMS Constructors](#cms-constructors)\n    - [Functionality](#cms-constructors)\n- [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n**Warning**: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n| Property       |  Type  | Required |\n| -------------- | :----: | :------: |\n| userAgent      | string | **yes**  |\n| osType         | string | **yes**  |\n| osVersion      | string | **yes**  |\n| appName        | string | **yes**  |\n| appId          | string | **yes**  |\n| appVersion     | string | **yes**  |\n| appInstallerId | string |    no    |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| clientId      | string | **yes**  |\n| clientSecret  | string | **yes**  |\n| reportSuiteId | string | **yes**  |\n\n**Note**: This configuration just applies for web environments. For native environment\nconfiguration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n| Property     |  Type  | Required |\n| ------------ | :----: | :------: |\n| trackerId    | string | **yes**  |\n| clientId     | string | **yes**  |\n| trackerName  | string |    no    |\n| cookieDomain | string |    no    |\n\n#### # LeanplumProviderConfiguration\n\n| Property              |  Type  | Required |\n| --------------------- | :----: | :------: |\n| appId                 | string | **yes**  |\n| key                   | string | **yes**  |\n| monetizationEventName | string |    no    |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version,\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID(),\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\n\nconst analytics = new Analytics([google]);\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\nand begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\nyou might want to add a click tracker to your 'Add To Cart' button. It's as simple as adding the\nfollowing code to your success handler (assuming you only want to tracks successful adds):\n\n```javascript\nAnalytics.click.generic('Add to Bag', {\n  identifier: variantId,\n  name: 'PDP',\n});\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\nAnalytics.screenview('ProductDetail', {\n  url: 'www.example.com/products/123',\n});\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| name          | string | **yes\\*** |\n| index         | number |    no     |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| number        | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n#### # ContactEmail\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| to            | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n#### # ImpressionGeneric\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| name          | string | **yes\\*** |\n| index         | number |    no     |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| identifier    | string | **yes**  |\n| name          | string | **yes**  |\n| brand         | string |    no    |\n| category      | string |    no    |\n| list          | string |    no    |\n| variant       | string |    no    |\n| price         | number |    no    |\n| index         | number |    no    |\n| gaQueryParams | object |    no    |\n\n#### # LocationDirections\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| address       | string | **yes\\*** |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| name          |  string  | **yes**  |\n| brand         |  string  |    no    |\n| category      |  string  |    no    |\n| variant       |  string  |    no    |\n| coupons       | string[] |    no    |\n| price         |  string  |    no    |\n| quantity      |  number  |    no    |\n| index         |  number  |    no    |\n| gaQueryParams |  object  |    no    |\n\n#### # Promotion\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| identifier    | string | **yes**  |\n| name          | string | **yes**  |\n| creative      | string |    no    |\n| slot          | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # RefundProduct\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| quantity      |  number  | **yes**  |\n| price         |  string  |    no    |\n| coupons       | string[] |    no    |\n| gaQueryParams |  object  |    no    |\n\n#### # SearchGeneric\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| term          | string | **yes**  |\n| count         | number |    no    |\n| gaQueryParams | object |    no    |\n\n#### # Screenview\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| url           | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n### Actions\n\n#### # ProductAction\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| list          | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # CheckoutAction\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| step          | number |    no    |\n| option        | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # TransactionAction\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| affiliation   |  string  |    no    |\n| revenue       |  string  |    no    |\n| tax           |  string  |    no    |\n| shippingCost  |  string  |    no    |\n| coupons       | string[] |    no    |\n| gaQueryParams |  object  |    no    |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45',\n    },\n  },\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n- City\n- Country\n- Date\n- Postal Code\n- Region\n- State\n- Time of Day\n- Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n| Property    |  Type  | Required |\n| ----------- | :----: | :------: |\n| propertyId  | string | **yes**  |\n| environment | number | **yes**  |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"00888fa704d952f7d3a4cbf4fcdc33d7655c0401","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.19.3","dependencies":{"axios":"~0.24.0","react":"^16.14.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.66.0-alpha.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.66.0-alpha.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.66.0-alpha.0_1657917553631_0.39710679015646955","host":"s3://npm-registry-packages"}},"11.66.0":{"name":"@brandingbrand/fsengage","version":"11.66.0","license":"MIT","_id":"@brandingbrand/fsengage@11.66.0","maintainers":[{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"anna.larionova","email":"anna.larionova@metroglobal.net"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"544e75562bf41a561a52449be2c754fd7c4ec0a2","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.66.0.tgz","fileCount":111,"integrity":"sha512-v40BKkfQ1aqHSoVdCmX4rj9rF6eu45HpdlHjC+DPlA8twwo4qMLHq399LWnFdButuWbEnX96Hw6/Je3cXpot+A==","signatures":[{"sig":"MEUCIFNuz2AmV/dF9X90nh+Tj9Ff1dM3txBBacGYt/SDw86DAiEAoj/rjKZvZLZEpuPjcPxS4rdUiAWI12bmFQGBIoNxnIM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":271030,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi6A5WACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrhtxAAn41aRmFs2Y9lvPuigvxz1c1SBp/zrPZBHLM3FebpvEHQZt/c\r\nxtkd1Gai8skM6rxJQKUrvLwISnNobmJ4ZJoRY7GEIpPb/Ardvv9jwvVohyso\r\nn8CWJ+/0p58/t6xdZu1dRBUT71JVkMc7OORzQqbAqTaSExFkNDPVzREvyMn3\r\nfuZKw61sNLHJJ1sgGXhGFwFNn/s+poYPy+BX7V9G4BBt8FTL2tQPVp82o2Wl\r\nxyeQewKqAbhL7LckPoeCUThtU0nlzz2qRUwtGhOjEO9gtwoVjH4I2tR8V2SY\r\n98G2EqMH2e5rfk97OXtnwvZIMELV1XOiUghMlugMWCxWRKNmLt7tmXi1VaMe\r\nCi88VL9u1hKr4vY3NG4yrG+p7MqWqewKr1m8U+ZXNQgIXTZ8fsvME5YZbqqy\r\nVNK7YBHG6+G+RS3FirRMzw+I4ELoyjCKxYqKp3a2x9qmXoMmlrP2Or2T/rAE\r\n9inx7b6vlJLD5BhbpjyHAYGaa7zfEkJkgWxtDE3jI88bnlYe12QUUAtn49h9\r\nf57xYD2XXwoS7BTp0R0w0SCxN5OKVN8usYqLU+ze/Evwa2P/zCFzeZyQpHTZ\r\n9GehRGq3vP6HICuTlZmpRK8mTbfR00pG2Xv2yzWnrhZNTTI8jKbv60Dlu1Oa\r\nlvpUDYvbcPFCf1/tg4/eJT3LknCngZ++yKM=\r\n=VEfh\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"ff6d2bd95d43528e85ffcb77d61e1e72a248b295","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.19.3","dependencies":{"axios":"~0.24.0","react":"^16.14.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.66.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.66.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.66.0_1659375190214_0.12149880933335089","host":"s3://npm-registry-packages"}},"11.67.0":{"name":"@brandingbrand/fsengage","version":"11.67.0","license":"MIT","_id":"@brandingbrand/fsengage@11.67.0","maintainers":[{"name":"bbtravisreadonly","email":"travis@brandingbrand.com"},{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"jon.ploucha","email":"jon.ploucha@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"3666b669302f7dea12f6b391d3547871f016e2d3","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.67.0.tgz","fileCount":111,"integrity":"sha512-1x3hrElf8L4v+i30XZC6ASoYBMz9WRbcZn+dcCnLZxOVYVry/GHb8sAnJVcCY/E3LoF1hu54A3UK/qwEfi+OBw==","signatures":[{"sig":"MEUCIQC+GzQSBGHG1klIX7s6KbErY9qW9oPWmV3FQ2kHbezbRgIgOK0XIx/UqA7J8l1zOhlrpv8Qzx8Ia/g/6UHwJ+X+r9w=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":271129,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi7DksACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpgQxAAhRUgyN122oYN7/HjVD46Nn0lgXp0bIZWzeoBQao2BQBd5R+Q\r\n0LLDOerXu81jLQYcXbxLwH2l+ScQHUL1EcIr8T5B9jNSjQ+ALgM8P8WFqpXh\r\nHie44Nw4vRgYwpsXcyuEfbfJ0JzRYc2K6AX/N7hpqiEs2rRIQyshqtmyUov0\r\nQqGjmp5tBRRx4Ybh5p+l+rttYMwrIF/rqmaqeuTuB5Fk19oOzinvX6aHXIsH\r\nmKQuyczKg1OJdCqLJMd3hLq/jPwh0gu8Nw05p1SWq4EQpBU+XYWjiHNsnYNO\r\nRKeBSTm8c9qCBuQFnN6angVzDDiiFTD7uvAf+Ll41WsquyXti+Q2fCIV0tW/\r\ngN3kJFud2LEaYaRiCvtJwZBPnK2LSBB5x9gij4owRxBcBSqP9j+ASPsO6b4W\r\nOCCSFOOHylc1AjDzU+HJyit8OYc8TYAxftxacIDZl00kBJDabN1aOvLplKXq\r\nVR4CUIk8eoXFldDdJqEQ7Cvj5K36FE/pHpvawSDYKHC8PCFZezScRtTKjLVb\r\nuxT1co0E/kuXgSTy0OYp+5JZOcSYGJ/Bd4pEYSkexIH66F8Ct3TUmDk3nm1I\r\nRGmMecpY1ltPE+qJGDJMPKrBf1JQdEN7yNq5A3WKUAFb7UgvCiHZb8vYMlku\r\nnmb6pSGQGutC5nLCfnCGzWFk1eOOz6MKwFY=\r\n=HgKn\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"54b47834eb07e8e24b2dda2e1d62fd927d5e34cd","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.19.3","dependencies":{"axios":"~0.24.0","react":"^16.14.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.67.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.67.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.67.0_1659648299872_0.4450271690047596","host":"s3://npm-registry-packages"}},"11.68.0":{"name":"@brandingbrand/fsengage","version":"11.68.0","license":"MIT","_id":"@brandingbrand/fsengage@11.68.0","maintainers":[{"name":"eberghoff","email":"evan.berghoff@brandingbrand.com"},{"name":"astgerbb","email":"andrew.stgermain@brandingbrand.com"},{"name":"bbtravisreadonly","email":"travis@brandingbrand.com"},{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"grayontheweb","email":"grayontheweb@gmail.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"tuckerbrander","email":"tucker@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"109648ea1e564a9565c72a62d52c14274273a7b0","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.68.0.tgz","fileCount":111,"integrity":"sha512-laISMG0Bzpsqug3WD4kQMy1jgIkS4ydHGINgceUt1IM1Yf3cPSqZ4NOXsyMSURBW9i9fgH6kLdye4GgCtgse3A==","signatures":[{"sig":"MEUCIAkL4YEtKPdClPrBiyWzsv3yhEhpw9zS2pZrYGOX6vnsAiEAkCxPRi3ulQAq+2WE+ZV9z241GV+aeh52sFAMyw4YtJ4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":271228,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi/+KoACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqLZhAAhXjnAVbDgv+nm4Ol74HBXcYEVnf4QN7rshU7UYMs38HSKYYl\r\nISXrgk8QymnWg3g40X6OB4t2yugETL6JcHISUbqxf1rmRnBbPd+Nf1D751vR\r\n6APedFN9CzJKf1j2A9G9aTDwqTEwPTGLY78xV1vGU1d/uv6v/YZkvUXG/vrk\r\nZtsTK/2kObaC2xtxoqxY5KFuKrTL4lfwxWAPdnXiD+xSgF/AOuExl5OUsRbl\r\n0/qhY/IYitzRfsED1fJOFaBlF1g79nmWR/ciz1nfcqEEO1XUkq8j4cnu/dt/\r\npmPqnER/Rcc/OpXEgTakqi1lk+EBCmSpQtSGyJYfswH17hNB5+RO6af16x1b\r\n0y1cgpNY5PIMbdW1yHanIPQumkdKsI+nFU4pe/fOgsx4X5CDqRAW+185Z2Fy\r\nl/qB0rEKaxeaALGwAq8iC2JA5fNhWb+s3YOEDYRbUBEYfEFrJlOloio4esv4\r\n9LVFPUqtspXuvlREiVn7zx589xE2Quud/EfOxylpZ1ECzXF9eZ3VP7jb317i\r\nlTELGRp6Fd5wltv6h39VpIC4G/JCv4s3/mxCWf0eHXnntc3cq6/OCWXr3Fbe\r\nPsQ+SGiKx9LT4ulT36YBJHztBaMUsbC7W7JAnTyVzc/TLrcJSTxoLYDb0n9X\r\nmWXr2l/6NysFWMSQqaCL8Cld81N7ikmNvt4=\r\n=gBwe\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"e148165d87ab698bb4d076490e32700fde354f8a","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.19.3","dependencies":{"axios":"~0.24.0","react":"^16.14.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.68.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.68.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.68.0_1660936872432_0.8725499987481493","host":"s3://npm-registry-packages"}},"11.69.0":{"name":"@brandingbrand/fsengage","version":"11.69.0","license":"MIT","_id":"@brandingbrand/fsengage@11.69.0","maintainers":[{"name":"eberghoff","email":"evan.berghoff@brandingbrand.com"},{"name":"astgerbb","email":"andrew.stgermain@brandingbrand.com"},{"name":"bbtravisreadonly","email":"travis@brandingbrand.com"},{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"4b9f9907ea4b8cd79e5580c3182427c86880c0ad","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.69.0.tgz","fileCount":111,"integrity":"sha512-ftxCCAklWtU8AePwmkYFZVSxDxT1eL9AKyQLD4QUn77GLUIpHgsa2yaBFk/wlgdHPvgR5nYklW6SMvjq5U7dmQ==","signatures":[{"sig":"MEQCIBdVn7LQ7xyEAjtPgVA8JwDol8PekfP54CwWTSjtKuHpAiAvKYi5rVOd4DiXXQR3GieowCBh9Uv5igEkygjNV1yffg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":271303,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjA+AOACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp2ZxAAiMh5IMJuh1cEkOLkQ60x032vL5aWNbu1DzPimdUuqPtI/rFx\r\nxEPOhunzyVdo0J5WS4UKxncWWJOgLU2R6+gdPqgouFGeNYnSY/vCSkS2vMK7\r\n7zuw0uXI5cwwU9b7P5ZFi0znDiYxXYS4KWGqJkc4DX7mG1PSc9pWCNm9BW2O\r\n/2jcgCCg7rkjiOSSRREXdpdjBQA5ECQQRLSLvdQElYxXO5yxRrcMjEWFjoxP\r\nua5yJSMP1SYoIAots96FO1FEY0fgShnj8bTy+ii/qaPF2/M19k9meyq6FXx7\r\nYA81fa59wt0QG1eYOWeEEgBHeeP2Qcx8CJcT3VHlRyJm+f4CQRsLCdQQ1YmW\r\nxSXD9lIT9oUhl6e05sN/3qYa9Z46QliFTncinlfYrQ/tNQmvdL/yf+I4UzTl\r\nW2+L6sTqsRCkm782o33NVmIyRucmaITrKHDYjgdzStA47GMBbuQi7sRB5+pW\r\nIZ2vSeFkHJRERoO4kQOTSGxR/1u9USl6lpRFc4292LSmslOSadyFLgGZpjQs\r\nVDFE/uZprLhGXYt1f6fbQZtvZgNbTZd+stfpCZs8jQeBgXKfYtWhwGFxboh/\r\ng1cAgZnPO6tilHpvlDWAtk+fsyzU1PVyOvwshouWbAF8iG0ibhY543imuSiI\r\n61hjiQfXE/Tg6CPwJ8AcTCnWbBhUjIQCblI=\r\n=/SCx\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"a641d226c72230c924bebb78f0831a94d7122651","typings":"./src/index.d.ts","_npmUser":{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"axios":"~0.24.0","react":"^16.14.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.69.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.69.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.69.0_1661198350271_0.5130743183053657","host":"s3://npm-registry-packages"}},"11.71.0":{"name":"@brandingbrand/fsengage","version":"11.71.0","license":"MIT","_id":"@brandingbrand/fsengage@11.71.0","maintainers":[{"name":"chrismojekwu-bb","email":"chris.mojekwu@brandingbrand.com"},{"name":"eberghoff","email":"evan.berghoff@brandingbrand.com"},{"name":"astgerbb","email":"andrew.stgermain@brandingbrand.com"},{"name":"bbtravisreadonly","email":"travis@brandingbrand.com"},{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"9c204fec13217b3bda0488065dbd0276ada2597e","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.71.0.tgz","fileCount":111,"integrity":"sha512-rWewzE1yeIGeV3/9DIqQg7IfW3/F2tVNzY8lOIjgPJ3Z1gnrmPdRAjVszcBBBNB2QQb9O1lx3eguxUEsJF8n8g==","signatures":[{"sig":"MEYCIQDXa5HcuOaMyaPpHbmy5+ARH3YzaznmD9dVkty0yOsocwIhAJmy00yfJ9f+Ra2lAoZEaMlVQx6j/5onEsiEf6lBk5Mr","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":272260,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjI59wACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpfEA/+Oh7XFDJnDO0nKy2ovv3tNxgcoJ1CXbeNc+YnwXHPxjgV2++/\r\n1gh/zyMZAivvMsZYov0h1zHLzNcmP3B/wcwX6wnH00ulSeLEUacCH8HpUl08\r\nKdyu20u0oj6OJ8zfobu5DOiasrefzNtoGX9UPmaJhq8lohLtgRi0du0wIOd+\r\n8iirAjuJJvSrbYaoRnHKYDt1eYvlwss+ucgnt1RD8aIRm2za8SwmC5TNy4Ag\r\n7IoN1mmi/zGpjp3hIPVUwwjPFstr3dvzBaFyyrmKJ+zX2nQlxIiLjCXENcgU\r\nzsqnEVg4clGjCJtN/tGpar85AQMrgl2WoOFW3qb0F5feN0gcW0rfYG7+1W/L\r\n3AzLGkeOmlvi7uEAVSRoAibSypJ8zRPPcPy4cRV7MTGEGw8k+LcQSPoH3LIn\r\nsG1Ut5rA3F42jx0rmE9wy5jra8x94nI5ZJo04bJ5n3l//loLWLHcB/+sAGXo\r\n5HzoYsMHzdyBM3baxTdUyJwGtXkZ3v409zCwpzYJwX2Uk52YqaESRCmi7Rvz\r\n9VfYx61fqPz3Jk4KVuZgKY6+gvtmjd2hf/ynqHt94oUxmcwf6ihwDmAQ4L/H\r\ndy6h0sDw/+MVdAD/nL2caRJn7wFtAaAZUhMeExC3jEWdKmX5g6+fepKHDJrq\r\nyfYdGfzw6lEaSZZ+Xec3vBzA7FJ9B9eiQQg=\r\n=GrA6\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"0a3488e257383f3d85129bee335c0c6ea464ece2","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.19.3","dependencies":{"axios":"~0.24.0","react":"^16.14.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.71.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.71.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.71.0_1663278960507_0.4488429231311897","host":"s3://npm-registry-packages"}},"11.71.1":{"name":"@brandingbrand/fsengage","version":"11.71.1","license":"MIT","_id":"@brandingbrand/fsengage@11.71.1","maintainers":[{"name":"chrismojekwu-bb","email":"chris.mojekwu@brandingbrand.com"},{"name":"eberghoff","email":"evan.berghoff@brandingbrand.com"},{"name":"astgerbb","email":"andrew.stgermain@brandingbrand.com"},{"name":"bbtravisreadonly","email":"travis@brandingbrand.com"},{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"3cfdc1dd9247d1c0c6d70b3cb5097a6d13c5eb70","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.71.1.tgz","fileCount":111,"integrity":"sha512-3T/AuSTMXw4lE/YLPpa6ndgqtM0AxXGKwFJil/1haFIo74y70WDA0a3WLAj+bceil/HizHHn6RO0Alwv/hTcwA==","signatures":[{"sig":"MEUCIB+9L0AqD7qlaqqEKOX/9aDPVSX27T/me83dWupTVxkkAiEAnXgb7XUFeqHIC10BvIiXKrkPF+FSflqSJbIRv4dkC24=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":272360,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjKOrkACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoDPw//TljfDUk4dxvkTXZdglqCM+BpaWu0ynonSRKoOxaYAgmGZk2a\r\n21CvF9UCO7MWxlgznav8xy0mORQOfhh0z4KKpFcnjimfpnLGHZOzk6HkFfKb\r\n+U7FDRaCsQec01MzH8y3tx2sJ0WobyoSjreRnvhXpagHhYiCpJoopprWIiE6\r\naBs+gNOwwKO7v3uwgR9HYqv4Nej38eeJYWfTCiSM78tYrdQA9sug4LRzdfMH\r\nA7bBUyB0g40hx5rvyp4eg12JySi3KxlL1L1uG5DszfYOB8Yrz/sbYld4QBaG\r\nAuF1zYzXf38Zb2LKwm2UT6geY3SUKeaOKVNAASrjWgnAREdS8y0zFrZxAxkA\r\nvgZ5J1JGuFWb5EvbsrWNfBKKfEhhgvpoux8qMV5Sreltr0CJozBWUo1S+3b6\r\nDOh3CPnRF/Qm67jEg2sgBfeGIEzNhNOaAmCKJo53Fg0KwFh66qblg2ujpSoB\r\nupPNy1XXWQlm87UuUZAEDw+xbs7LIDsHp/cTiyN/5ky6p5oz+TgVxvWMpAjN\r\nHJy4G8C43Ao5Y3zfxvXiPDqYLDSEiY0mZZ6/2Wp3OEHPNK86TX7wV/Kgc3PO\r\nY1vCjyrcYZdP32+Gcqrqq1/bEOLo2RD2SWmzQ5/2m12ckT+1ERQRCS6FI5QD\r\nczYeJON9jtjlHKYrUJoxStxcT//qOwEF02A=\r\n=kPq/\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"976513efe521aa35b6b4202c1c65e0c842ffd381","typings":"./src/index.d.ts","_npmUser":{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"axios":"~0.24.0","react":"^16.14.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.71.1","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.71.1","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.71.1_1663625956264_0.9228777817954006","host":"s3://npm-registry-packages"}},"11.70.0":{"name":"@brandingbrand/fsengage","version":"11.70.0","license":"MIT","_id":"@brandingbrand/fsengage@11.70.0","maintainers":[{"name":"chrismojekwu-bb","email":"chris.mojekwu@brandingbrand.com"},{"name":"eberghoff","email":"evan.berghoff@brandingbrand.com"},{"name":"astgerbb","email":"andrew.stgermain@brandingbrand.com"},{"name":"bbtravisreadonly","email":"travis@brandingbrand.com"},{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"9c58ab621ac1d2edddbbe7ac0c9e84841dee73d0","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.70.0.tgz","fileCount":111,"integrity":"sha512-G8XILZXZT0GfR8CTHlnj+8KFDdDS2e3RTUljxGDuDWoVJgXg2Ii4yWkUE1X1DYg+C1jXMHNcaGbrgkijp9AijQ==","signatures":[{"sig":"MEYCIQCJjxJbXfxL0JSUZ0piKg0vG5DIkfwBrTWB4xjg6fD6WQIhALdrVrZpv9XHNgHaEM9w398HdZSuarmVDXaRP+sC3Yci","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":271874,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjKf7BACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmrxew/9HdBDhEGXvCgXufQVazhokurophofZMd83EwjjCj6d5xYvk4c\r\n5iYBiei8CVXmTN7gx+C6AmGtOA/1Zab+NeG5nZ7ckJElPCVjYYra7KYCT2w/\r\nFZ9QRDeanrgdL14ssAsPhCKA7D9mrmjJj8fMmydBjQIpGjj0Rr9LklRHPKLM\r\nnv1hxewQ7yqYOzX7Z7LfBzIfTRyq3IaUc/O9Lkfp1Unv/vVR75UeAFEN7+MU\r\nP28QZQWgIJ2PthVrTb/2BVMilnFo1BTwPO591RDWCa36umnwsJ4D1PxynhiN\r\nDeoUVRz7NbHjpUDrNpz2/gBNlzydtP58ORuKdjL2Dja1of2ncVSjtdbqvT14\r\nBnk8WZvTziqFrENRd4ZruWZHyqfzkuuEIpra3asRwnjcCU4lq5BVmnZ2QCqE\r\nwQu+5aDGLn5rYNsrzDkUvUZ69NSQR6FlFgolCx6BSpxjrACoys9wyiZ9Brnr\r\nys1g77HUP4OcnciBuhT2/5G9f/j2HfRnSuJlAHS+aXgjXLwJdjhIqYXOLhrv\r\ngSyIRA2fSjtdcsi09/9YTRRzyFDRn5GoXl+koIEV1EVkq0Gi+FkIcIQkXvZx\r\n6AZIGQvN5CJkS0ZLH9VOSEW4P1vKNtZrrLVexTcRjwnfsqgV/dOcl215dEfY\r\nmVgFiWjBeo3O5naPr8fVSpm7eX65KH8I0Sw=\r\n=2pDS\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"99b1ede92ee78cc1fc86d9af76f1004887d2a70a","typings":"./src/index.d.ts","_npmUser":{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"axios":"~0.24.0","react":"^16.14.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.70.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.70.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.70.0_1663696576902_0.09580607052019885","host":"s3://npm-registry-packages"}},"11.71.2":{"name":"@brandingbrand/fsengage","version":"11.71.2","license":"MIT","_id":"@brandingbrand/fsengage@11.71.2","maintainers":[{"name":"chrismojekwu-bb","email":"chris.mojekwu@brandingbrand.com"},{"name":"eberghoff","email":"evan.berghoff@brandingbrand.com"},{"name":"astgerbb","email":"andrew.stgermain@brandingbrand.com"},{"name":"bbtravisreadonly","email":"travis@brandingbrand.com"},{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"brenont","email":"brenontavares@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"olksns","email":"olksns@gmail.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"southpeter","email":"southpeter77@gmail.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"52c224d6a56c00cc9d78fdfd97347deb9e659814","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.71.2.tgz","fileCount":111,"integrity":"sha512-gHVEOkESznh6W/a7ohN9cz4vqvMdENMiD56ewdaMUcL/zP/w66LsXoOGOTyHivF+NslePRFwucgTRPRvYcVZKg==","signatures":[{"sig":"MEQCICzIeIf2+OCHvFBIf4y8K6vRe6xcuCPePzJ5EU47avpjAiBHDOqCwN0YJ/Ka+XgvT1zNBeUkViBruX8GQ3ps62E4ng==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":272460,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjKkK1ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrGcA/9E6FAps7QnfZleEtL8DPG6tnnZsL12SKx7nxZeWgfQK2dqm41\r\nazm0favY4x/B3OANAuP3AdOtNnVC1/IQ2zz8gJ8xVvucqDUXOvL/4Ucr8hcC\r\nt50Faa5r4pYePDvNHg7E309MVUaxYhOxO3A1TfBCGiVk0RNb2x/ftRVQ+Yui\r\nAILjAeZJXbET0tD6SF18y4tiM76CozyxEmhz1P6lixDe8rfwwSMz130htkvx\r\nNoktazEbPxm3mwy7bIuMHrfoiZ6ru0r1a78hVpg4TOFPzEpT8bDm2ghn8KJE\r\nJgNjVchgEmyy//K8tfvWnAju682pU1FpyBw8YM0Un19nzzk6ttzPaCXQ3XTs\r\nyvgpYhq9pFYLFYdgCRt6lFgkr6FxhUc8Li14KDx7oM7jkNx0R9gB0MZ0vAaA\r\nDFj2QJXsPN478RNhc7dVSludIbn3lKfiPEDhdqazQ1VLMlm6GfptzLeMPpaP\r\nqQZWwsl3sROXpYDwqMnn9xqgeicNe8jZG0Hckgns2GvRCqFANzsTl33/xBQK\r\nYPy2PdBfIX8EHq4U7k9m/w0YgsNdc37+bp3DRY7fTW8QOqSJ0yfZU/bGr1kC\r\nY788e+bYPj3u6ByF/9VtVsxbRkOOwMFAGj7R6jVtsDSLM/yuHGJ2wWMWiEbq\r\n1WWa1pxZCHERvjRHTwOHQxcfkeM0wPxs/Hw=\r\n=gWCa\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"8fdc50d3417fd0ba17518f76fd2dac0521e79ddb","typings":"./src/index.d.ts","_npmUser":{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"axios":"~0.24.0","react":"^16.14.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","@brandingbrand/fsnetwork":"11.71.2","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.71.2","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.71.2_1663713973148_0.2947602411163768","host":"s3://npm-registry-packages"}},"11.72.0":{"name":"@brandingbrand/fsengage","version":"11.72.0","license":"MIT","_id":"@brandingbrand/fsengage@11.72.0","maintainers":[{"name":"eberghoff","email":"evan.berghoff@brandingbrand.com"},{"name":"astgerbb","email":"andrew.stgermain@brandingbrand.com"},{"name":"bbtravisreadonly","email":"travis@brandingbrand.com"},{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"e4650e97370229a4651c5ed693aa7c2b6deceff3","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.72.0.tgz","fileCount":111,"integrity":"sha512-gsfj/h8SRnEosIxnQVt620pzjQwdRngfhd01udv/lbOLtJn7XCxJZ5EEagifSEmga/4RbNRoy5yIVzxfM9wQow==","signatures":[{"sig":"MEQCIFTAFu4fwYyOzk2cQtc7pE1xUI/E6RJ+iy7sr0ElZ6nqAiA316F6mxb6yEJ+0Vd//cWM7CA1mMvg4jHlG1RnFVcIwA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":272636,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjRxQGACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqp+Q/9FFDgVCZVIbhD1wKAdk8pNhzkC2SdEZbaYNJ3omprqTAagv/d\r\nXxEl/YfNbgYD2VvRDnmXBDx9Ny1qgqlAy16VPQtDYLEBNFabFDa5XRXyvEHG\r\nvci4OltGq7gzTvfB+4qJvBtuXbXXecS9eUxyklqR8SvILYv9dhuwD2TQLSEn\r\n9LB2lPJDcOcTwzOvZu8gLszuQC+l/qswwt6E6rvDgN2pVGpGV8s4sf5A5tSM\r\n6OE3E0vgg41J5KtfhZuk8U+c/XnwhUUgGj6z6rz0c/DpEzVb9gUv59J3psWC\r\nw16nswkDkGBXCAVR9qJ+fMtctm4V+p+TKDrbU3phYa0GGdb4JX35DpdaDDzj\r\nNznAZFQznqauyIVlQvEHXzsnuHAFuj77t4YBy6VYCgv5WZfHjPsCfSMtIh3x\r\nOLAhLZpgt6Zdx28IhrkATuQGwILyDAsJLMqRt/K/9QT4w5d2eK35wtY34y7d\r\ndBf066UY6JSIEnIH4fslEbfSX3go+bsbIpLXfILNQBtDmao3/whxTPcUiwwj\r\n5C1Yyqk7+4GuWcrndd1oIO0mwkqwu1qpJk5+AYvCbZ4DoTVfzK56FWN2/T3k\r\n1yJCmm5DZkEWAUJ8vim+QgaYS6xW7j3kv/jf0XkbEIpLY6NKKjKhU75N5slx\r\nEHrdLCezlt7lzAIhaUXk81pUwgtx2EicE5o=\r\n=r3fK\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"18b6a92460d9e6da741d1fbe4446775dc6fb5127","typings":"./src/index.d.ts","_npmUser":{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"axios":"~0.27.2","react":"^16.14.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","reflect-metadata":"^0.1.13","@brandingbrand/fslinker":"11.72.0","@brandingbrand/fsnetwork":"11.72.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.72.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.72.0_1665602566418_0.7945985248979479","host":"s3://npm-registry-packages"}},"10.19.0":{"name":"@brandingbrand/fsengage","version":"10.19.0","license":"MIT","_id":"@brandingbrand/fsengage@10.19.0","maintainers":[{"name":"sergeykulakov","email":"sergkulak7@gmail.com"},{"name":"eberghoff","email":"evan.berghoff@brandingbrand.com"},{"name":"astgerbb","email":"andrew.stgermain@brandingbrand.com"},{"name":"bbtravisreadonly","email":"travis@brandingbrand.com"},{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"06d8f212db15b10bbdf785ba5a26155fbc172cfe","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.19.0.tgz","fileCount":162,"integrity":"sha512-DdRiuI2qPSMHzjhwN4KwmQ5YZsYp+XWtVL3EWT8pAndnMsFlrlHcU0CxB+JjhLFguZYkWspQ9GFUXHvX3X9PpQ==","signatures":[{"sig":"MEYCIQCoXZT7iTHC6Fa4QkUc4wMvhgmZpLHBZCDRBNykxMSkPQIhAIHNwv0HIMwFyV7ObzV5FwJHf/sVrKGu+vhgJsR8zdmK","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":423980,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjUBjeACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqaFhAAoAqxrQbNPEYwv4bnTIF/018SXGKp4jVh5UqsfIWhCDKgRA1K\r\nbpDLV+9rh+qMNu8cqdFbt03YfHuKdLF7B7f5OAd8SbAgGPp+qZum0HEJQdiD\r\nZHgB2hKSg5Whk0xrd/ejo2SQyoq8AFNOtEGGcEJUOqg7JMQgrsAFv6AGcxSe\r\n6bKQly4TjNniASeHYQnFCCosGQ3Mo1BMksjsjwPTd0/t/nTa5h7MBn8o3rgL\r\n5RnLI9SY6tekHcQHUnhQQGL02iNumrLbLqBxaf/UZZSloOiYPVVOfjbHtSId\r\n2SEMxsJZhMF+FtBq6i0fgNTM0zsmOrt9uFpSLzqeegI+cqAj/NxVIuIqq2PL\r\nzDxwMPlzuoFroeHUO3WFgiWaVyF3A+FVFmh6xjr489dhu1EInHTyCMu0kVoU\r\nmzmT3wCv3oaxb/XEIe/uP0SqQ/lRmAZ2ypjQShkehs4wOwvgxMv9SfeTXftd\r\n0us0iIWK2pLynTw3PvlJKWVZ+G4EHnkhpvfdDhFVEEPLwO58jI/ot3u8w85V\r\nK7j5709wd7TRXi4JnDTtmbFtC7K9u9kTCFSJt/nI9hb6PKTx2+zxtrAudhhv\r\nyfrkpAQCmdK0MXOvZfghhROiLZVbhfEiZoLPEVN4wTqYRsdp39IvJWanoZOT\r\nxrH/eRBvpwbXCeQEIqsKPfC1uwsHn0K0z7A=\r\n=96Ne\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"ac14620579a05b0b96576212eb6c12cc721baf41","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v12.20.0+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"12.20.0","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.19.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^10.19.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.19.0_1666193630127_0.042489030075988365","host":"s3://npm-registry-packages"}},"11.73.0":{"name":"@brandingbrand/fsengage","version":"11.73.0","license":"MIT","_id":"@brandingbrand/fsengage@11.73.0","maintainers":[{"name":"sergeykulakov","email":"sergkulak7@gmail.com"},{"name":"eberghoff","email":"evan.berghoff@brandingbrand.com"},{"name":"astgerbb","email":"andrew.stgermain@brandingbrand.com"},{"name":"bbtravisreadonly","email":"travis@brandingbrand.com"},{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"d4687ae09e75d48791faedcd0cfe321f1ae62f95","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.73.0.tgz","fileCount":111,"integrity":"sha512-ozEAk1Yt0LkXxbMrY1cOSoBTlxRDMhN0kzogUXorCVUx/X2i9WBDgbfDoFyhge8IBYoe3pMYSmGOpm6frjlcIg==","signatures":[{"sig":"MEUCIQD9UXtC36Dh5ZYnzsjNNu2ZlrLO7gLzpWf1iwT9eytM/AIgMbAPSCTuMOQci53pB8uyBjEjoP/e5QZ4dthBqG50be0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":272735,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjUCkXACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmoz7Q//dpDHo3W78izPJ2lq22QHh+UrZgIN1tATySH52b90V/rW34TP\r\ntyP3Mgv70zDSp0usxFYJdfvd9lwZfEDo81Qs7cx6eZIQ9u5i+jtpebMDO3vm\r\n0vvxy3QUB0tVso70tcH6eaDRc6RcUnARLX9gOq4eyblcNWlZCp5K7A9rtN12\r\nDD6rPwrcy74UtlAYVCZcjgB1XS4av4oeRCyCo0kWG4LE9j8kjY69dtXeyhYO\r\ndYBWm8AWj4dV1iNbmpqenPzm7crTLGRRaDDwl+bccXFwbuRRSmXQPNdkhbzS\r\n12gJ+AC2TBMLZcEGfbS/nLAemzacD5G/TMufl5o5hgm1/hl83SAKrAGxWPvd\r\n/NpMd91YTJt66U8DGVU2zFPvFxzL9rzD+7/254bhQ3QOTNKPZl//8ZrL2M/q\r\nxbiByygGkGrKidq7vfeDGAOcCgrCJzpjQVafzwcsE0pqmtoWz3HMfM9a8R4Q\r\nsNhXW2/Z6q8Po2X+y5jdflC3y7la2708cP5Fjv6GhFLhJz2ZO8ipqleM9mwp\r\npaePJrBvxEuarDgZJu2vrjGkU/5/oNmBnz33Sek6mkcbJCK/AzdX48NgwywS\r\n8ItU3clHpOtrejIgl7pIsY5h+vGFQGfRehHbkpmkjFDW8B9664dvPZO6uEx8\r\nzXTIPnmDoM5XjKQTYi0Qqygzm/zOpps+SP8=\r\n=aNVh\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"1edc65ec97ae8f425fb4f4dee6c6a3fe42ab084b","typings":"./src/index.d.ts","_npmUser":{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"axios":"~0.27.2","react":"^16.14.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","reflect-metadata":"^0.1.13","@brandingbrand/fslinker":"11.73.0","@brandingbrand/fsnetwork":"11.73.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.73.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.73.0_1666197783403_0.11492436918538251","host":"s3://npm-registry-packages"}},"11.73.1":{"name":"@brandingbrand/fsengage","version":"11.73.1","license":"MIT","_id":"@brandingbrand/fsengage@11.73.1","maintainers":[{"name":"sergeykulakov","email":"sergkulak7@gmail.com"},{"name":"eberghoff","email":"evan.berghoff@brandingbrand.com"},{"name":"astgerbb","email":"andrew.stgermain@brandingbrand.com"},{"name":"bbtravisreadonly","email":"travis@brandingbrand.com"},{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"c38960548680bebbfed58cd57ab52472ae1fa869","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.73.1.tgz","fileCount":111,"integrity":"sha512-p4zMjEl2KO11hBFLps7jV/OTH7+TmM/cgNuwq0ZOvPfHOaE/TGp6n15FSnkparh025meLXpDzCAEV9OfgfAAUw==","signatures":[{"sig":"MEQCIAkj6SwGkCIiNY0f37/v6zt9Aj5dv/0tfEEM0mc/HtcrAiBgepTkNCFJzvy1DSRvZmUANzaLyZOvbijY/71mG4wqow==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":272835,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjUD1hACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmopyA//fzg98TVgMrvAIt85ERv3kRhILvOaHEN0KkoLKl7iKiyqywbf\r\n8VisiegqN9XtbCa4A3M6ydfqSaeWQzhFQXJmau9dhx5FDwAiXEmpMfAAcxt/\r\nDVUZwo0zf1bFhEKYvdJ3HrBTZdb3N9+MuJuK3jkWr+NR2qVVFdpTiXU5EBvM\r\nBiU6nfjdmnz1Cqd5PqJPDsMx20Q33pQEXiDlb5Ov/y16Zebpddpz7yNCM5To\r\no+TnzJdzvEpvb6dyFYcv+zwXzu7Z4hwUXbDBso023MMoNYCPuwR7qBWCEpWW\r\n3RpM1hMQNmdzUQVytvPCgbtZ5NkY3YmbvD54KnOg0e0MLA/EN36wvjpkYMFZ\r\n/ogXaJQAmrUdOorM5nVSQ7rU7oj+ovsCRRhsSSHiGLSvltK+RMVK0e/NvVmY\r\nqxNyq4zomm2NgoWa3XCCSbERVsq0q44dy7uhnXB1eJR6ucpL6aFjAoUtNJdL\r\nEbHa23q6ih3qOP56drthWLtdvpF3ZQB1XJ8cii4TFHWeMzJIdA2pkPOZbn48\r\nn89/NhQfVVce9nJAYqwpmmAGJUiU9PGPXKdmMO2XmBqRXMYDgZtaTbLYzKF/\r\n99Fy44cuY5vJMyflKBh4IE8YuroA4DQEcrNj0QqVYTq68oyleJGlKu/+TpQp\r\nJeIXpOTZS39TJVxTstkByofs5FojV4Y2B44=\r\n=kcdC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"0bedcd624ec22641df602cb8e4c2773cfa56c053","typings":"./src/index.d.ts","_npmUser":{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"axios":"~0.27.2","react":"^16.14.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","reflect-metadata":"^0.1.13","@brandingbrand/fslinker":"11.73.1","@brandingbrand/fsnetwork":"11.73.1","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.73.1","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.73.1_1666202977269_0.12010339304810458","host":"s3://npm-registry-packages"}},"11.74.0":{"name":"@brandingbrand/fsengage","version":"11.74.0","license":"MIT","_id":"@brandingbrand/fsengage@11.74.0","maintainers":[{"name":"sergeykulakov","email":"sergkulak7@gmail.com"},{"name":"eberghoff","email":"evan.berghoff@brandingbrand.com"},{"name":"astgerbb","email":"andrew.stgermain@brandingbrand.com"},{"name":"bbtravisreadonly","email":"travis@brandingbrand.com"},{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"be4abda04917d402a7edbb34dbe71ece94c941b3","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.74.0.tgz","fileCount":111,"integrity":"sha512-/Wp+w3OSJY2M+PSxPeJqbEs0wDNbLY4sPQTvBkzvluL9LWlTp0pvuzHJ+Z8SovIBbEB4b/ScpvfpOdseriDZyw==","signatures":[{"sig":"MEUCIQDK6yMe+KLp/C5rT7WOiE6cA5rej3jxAB/z34QziboWQgIgLgeKFskPbngoG644frB/S2qYYLO5dEM50fNaP/epKH0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":272934,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjWGabACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpFMA//aXPztGJT07yHqpU+3Cb5zowfs8Ay0Rfm34ENPp1Zld2Ve97H\r\neYsEnyy2Wn0hZEaFxWtsWxa+ezOSwhydOsQgXWw+WXV2zn0AKliCS+9eMiCn\r\ngavmtQwkZCMnulQ73hQME3nrX3BrOOiUzUlCx79VlUeUqf6SuIQdGAeacK83\r\nBO9A0tNMV56MQ8gsbfli7q9tPq/VgXDH5el39012Vpdqhdrh0FrVh4bS8Dqx\r\nZV4lGUYUm0FQ3pn8wE435rdwOAkmtFriwnF4X9sqnFyJHRgF93FzA3t1cIMr\r\no+64au3uvkeuFd9mOeBVogEX0CZ/85rhs4sgdFG+tLa61xXbHtbGDBAtBljn\r\n1tdXOmFo0who/xFScdy8LqhviZSuzdLW7H1L+MJys4zOd0+ytoogn7yVyVW/\r\ngaRBajookiXndT8vn7B1CEH6xzY24b7BKv0Jrqq806qcDXmgyxKhFJ/pRZkK\r\nYiYo69T92ciBOIN7I8RozEL95o5AdNtxhlM3Er5sWIdWbUR69nPmL+oAvIkr\r\nQ3/yJmL8I57oJY1LqP/90KEkpKsSETjq2by9mtIZflrduFSMqevHpNpxRDhr\r\nwevgQ1u+TQ/yi/lbsAZYnQj2YFeQ36F5NpetUjG1OVhrMPkKAKpZ97pclyaU\r\nWyqmLTxjyz3F2S3Di7DFTbPyHKzUslFBpLc=\r\n=CPdE\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"b5747f70b74771fef787f63a7aa0cd3a90e75580","typings":"./src/index.d.ts","_npmUser":{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"axios":"~0.27.2","react":"^16.14.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","reflect-metadata":"^0.1.13","@brandingbrand/fslinker":"11.74.0","@brandingbrand/fsnetwork":"11.74.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.74.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.74.0_1666737819799_0.892779662952764","host":"s3://npm-registry-packages"}},"11.75.0":{"name":"@brandingbrand/fsengage","version":"11.75.0","license":"MIT","_id":"@brandingbrand/fsengage@11.75.0","maintainers":[{"name":"sergeykulakov","email":"sergkulak7@gmail.com"},{"name":"eberghoff","email":"evan.berghoff@brandingbrand.com"},{"name":"astgerbb","email":"andrew.stgermain@brandingbrand.com"},{"name":"bbtravisreadonly","email":"travis@brandingbrand.com"},{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"73f1e5c69c9b94dbba607d616c10c54486a2780c","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.75.0.tgz","fileCount":111,"integrity":"sha512-g2R5rdgfAoqdyiQZ/x7a/hvuYybdf/3WHbsoxasQO7cOZ6/flEkBNk5/v5B/Lepy5BaIBiBFVzpAWw9bFV8JgA==","signatures":[{"sig":"MEYCIQCgiraiT1jJ0W6HIFisKuru0H0nZMimqZRTiyyeAJLorgIhAPEU3JP8iIC6kqmDZg30NR+5J/KHO0R6Vbatq2ZpyykI","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":273033,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjYqyVACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpVyg//YgNBhoWtl/KccQOw8lYtiyUCmdnvmO3RY33sTwIvXCa87TGa\r\nfM9HcrARBCcUSODLRjR6ReuVcP+vhCbuojSA8/VXAPhgy+ZOBaEAWcW8Q4pi\r\nu/B3r5r0Gv2WRqxXt4MwLR2EnTnQscgBySRB/oL5j9ZYp9qUvLbgRltbyHA0\r\n4LDXNzg7PA0CAse+7C008GRzzrxJkF0Z32NFR5jQ3/DNlgmvvLjCTxxhp9Py\r\ncqDVIpXVbPT+QGk3+wvSSSltLwNRnq3cSLookOIvHmheqdLIw8nSng8/KYt5\r\nHuK/nCdWIxmy29EHyv53xC3sxGoCzKI6PD8eLijPpp98cvtbklSr8jUNQFG9\r\nAUx/0JvM0C1/zpk0KE48S1v/cWIxWfcP3oCWKJ8da7YzQTKX6/hP8rRMRUyr\r\nvYiN5FsTQPgSUmGxdo9gi0BRjsnAIlFTGlUUez/xz/88TnFAn67eZK/4Vz0c\r\n218yUWnvLP6FbjDLTMa/wi6Aj5K/uY17pfO2c6xj6c2rc6Syehsg8nKQ8WgA\r\nNpPfR4Hi5vR7l415wZi8zbPxx06ccBn2r/hsF+qjY+dlVZDrBkrUSTqQHs8K\r\nd/kWAWQQDiFgfTq2bpUaLTlu0MK8bNACa0oVddI6+mrC9aRY0/UlfhW5/KtA\r\nHNmTyP8VoqEe46gmhtZdKbsUc/4+FXXYEyA=\r\n=/I5w\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"1ee80a8907a7df686f685f278c14a85caf176e15","typings":"./src/index.d.ts","_npmUser":{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"axios":"~0.27.2","react":"^16.14.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","reflect-metadata":"^0.1.13","@brandingbrand/fslinker":"11.75.0","@brandingbrand/fsnetwork":"11.75.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.75.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.75.0_1667411093641_0.62326300994591","host":"s3://npm-registry-packages"}},"11.75.1":{"name":"@brandingbrand/fsengage","version":"11.75.1","license":"MIT","_id":"@brandingbrand/fsengage@11.75.1","maintainers":[{"name":"sergeykulakov","email":"sergkulak7@gmail.com"},{"name":"eberghoff","email":"evan.berghoff@brandingbrand.com"},{"name":"astgerbb","email":"andrew.stgermain@brandingbrand.com"},{"name":"bbtravisreadonly","email":"travis@brandingbrand.com"},{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"ff8e7a9c8aca83d95c85ee3deddce1f336012634","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.75.1.tgz","fileCount":111,"integrity":"sha512-Nev0PGh239RfzYTYA+AeoY1uNmvEjheOZ905SA//Ul4opy9wx9JBFAK85d2pVICgrLDTxXEQ0BrarYEaiSNDDw==","signatures":[{"sig":"MEUCIQCEKnUjE6M1IA/Pu1AOqr4XYgwt8t9Wrc5uZTySb1CsyAIgLolI6MbBFEq5mFC0aeBttT5QwGAkkUNr8V2unXaYbXE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":273133,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjYwrHACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo8VQ//XPW2zrLA78AcGumFyx5R0ZoOQF4YfxvxY4vgs4X5vp5bBvct\r\n2nxRgwnOwH+JHyQOr7+SvRIKVAvq++gmNNRFMaTINvIRlxd2Sgu52NbWZKBu\r\nMQgXRLZykDMyU1+8GiO0VsR5D28Zk5nZ6/ACpvoim0n0CEXpR/jPVwbwxCSX\r\nXNr+VmlyFBKX3NU0BxFHaNmVLGX2bFWnNG7rlExCp9TQKL51T+iRr59o1+zn\r\nB2sWTUyq5TfxI2p+UOwiUoXXSUFYVd1y0o2WqBfqSH+cIyJm4XvDBGhQzHCM\r\nPoVfOOgX7AY0lo/2j+JYfe/eQ/mS6HW/5RfNZTEO10WEug6+ll7wFjfrNRXs\r\nNwe6138Yl+/B6zMWUMvlSySgFr7wXfmiTvWiEpG8rOUcUYP8THvrJozawQ21\r\nKsBV2FnJKPHIKc4ctpWjw4XSh5dJFh2qkWp+JsPDD15bq0FFblcY35mxmhIK\r\n1WD6UxRS9bCrU6rAwos1KTg1jWQQH3HWDEd5conW9WyRAUHDzRa/JD9/LcYp\r\nZRVJsQ3Hhzme2+UV4Wh4gTHUJXn8smY8vjl3xFzf95SuDdF5kVIVqVqnn1ZI\r\njH7hXYFESNsAH/pYhgCGvbl2dq5AIDyq7g1UWr4vqLxpnDC+NOOH4OSTcPge\r\n8JmqMpN1u3KusCcEsSCI9w5uUYdDRaJf6GA=\r\n=boew\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"460c798c87fe2c037f8013c3aa0033087a765137","typings":"./src/index.d.ts","_npmUser":{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"axios":"~0.27.2","react":"^16.14.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","reflect-metadata":"^0.1.13","@brandingbrand/fslinker":"11.75.1","@brandingbrand/fsnetwork":"11.75.1","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.75.1","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.75.1_1667435207143_0.06888515531157569","host":"s3://npm-registry-packages"}},"10.19.1":{"name":"@brandingbrand/fsengage","version":"10.19.1","license":"MIT","_id":"@brandingbrand/fsengage@10.19.1","maintainers":[{"name":"sergeykulakov","email":"sergkulak7@gmail.com"},{"name":"eberghoff","email":"evan.berghoff@brandingbrand.com"},{"name":"astgerbb","email":"andrew.stgermain@brandingbrand.com"},{"name":"bbtravisreadonly","email":"travis@brandingbrand.com"},{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"dba4780e1721e083377cdf1ce73f30f2703e3ab0","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-10.19.1.tgz","fileCount":162,"integrity":"sha512-ibiATNzLt8Sfb4VCwjydoHq1zI87LRQgml84ySTyS6fIoG2SaR1y4jhgun6zlWfvl48+zLkk3VCwIbky9LD/IA==","signatures":[{"sig":"MEQCIFJF34LNuTYMfKNOWbe0DA34TK+kUEm+GDpYaNGUHKnaAiAx7RfydYYwArLHnvyuIukNKt/vm817+muJOob/eFXjeA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":424147,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjY/6PACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqMxA/+MVTqO3a4ym7lwCQ/PvzvZbIMVeG1tnlSXIEETt9ooAKVe5Ek\r\n7/JEi3qXdZPX8NhNSdQ49fRF+OM3cG+YkWywcBAlZcdtJb4n1TptB4b5Hokr\r\n9fN/GeQXFOpesk4GF5TVvT00PujXfBEv2KQfQjUYSje2DuL2z73Ih/knSHdd\r\nrJmYIcM8qx3eFyHBYUOHMM/tZbxlO2CfAEeYGanSRcM48hVityKftBM574pA\r\nGuFZSpEErhcSYf4P8qdyoBVVWTRsURxRGaD1Q6D7gd7xVHgVpZd/OD7HfPO5\r\nH/p5TRm7v0vPoL21AdEEtEiWzeAUg9AWgWrI+aBgacw642td6VVpXgpd7G2z\r\nhGudmT2WdWoju3qewyVTTEhJAqV3Kqd2rVcDiOz8IEbbgBq2kuouGIwpaHhX\r\nBMEU8hKLxLfEqHDd2o+MB8QCJGbwnVV76sa8OeNew3ev8IZK/+0c7zRAV0k1\r\nwAZN6xuGtqCv8aUrzPQh6+sJ+YmcQDtjAr9g029AmKzESWRkkBscj9TOMtgb\r\nm3/YMjjbdnj7l58+weIsFifBF02MROjgGI9YML8z1irUvzYkERfYRO1PG8/S\r\n8HeIzKcYcKbc8884bsyXdRSs6LwDazK3hlTKaUsFXjWdmaMXDdE5lKMcblmZ\r\nKXSQoRiOMeUTisu47a3ufT8BteVi9owQymE=\r\n=3yqS\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"./dist/index.d.ts","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\n will support Demandware.\n\n* [Analytics](#analytics)\n  * [Analytics Providers](#analytics-providers)\n  * [Analytics Providers Configuration](#analytics-configurations)\n    * [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    * [Leanplum](#LeanplumProviderConfiguration)\n    * [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    * [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  * [Analytics Constructors](#analytics-constructors)\n  * [Analytics Tracking](#tracking-functions)\n    * [Ecommerce Function Signatures](#ecommerce)\n    * [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    * [App Lifecycle Function Signatures](#app-lifecycle)\n    * [Full List of Property Parameters for Tracking](#parameters)\n    * [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n* [CMS](#cms)\n  * [CMS Providers](#cms-providers)\n    * [Core](#core)\n    * [Demandware](#demandware)\n  * [CMS API](#cms-api)\n    * [CMS Configurations](#cms-configurations)\n    * [CMS Constructors](#cms-constructors)\n    * [Functionality](#cms-constructors)\n* [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n__Warning__: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | userAgent | string | **yes** |\n  | osType | string | **yes** |\n  | osVersion | string | **yes** |\n  | appName | string | **yes** |\n  | appId | string | **yes** |\n  | appVersion | string | **yes** |\n  | appInstallerId | string | no |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | clientId | string | **yes** |\n  | clientSecret | string | **yes** |\n  | reportSuiteId | string | **yes** |\n\n  __Note__: This configuration just applies for web environments. For native environment\n  configuration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | trackerId | string | **yes** |\n  | clientId | string | **yes** |\n  | trackerName | string | no |\n  | cookieDomain | string | no |\n\n#### # LeanplumProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | appId | string | **yes** |\n  | key | string | **yes** |\n  | monetizationEventName | string | no |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\n\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID()\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n)\n\nconst analytics = new Analytics([\n  google\n])\n\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\n and begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\n you might want to add a click tracker to your 'Add To Cart' button.  It's as simple as adding the\n following code to your success handler (assuming you only want to tracks successful adds):\n\n ```javascript\n       Analytics.click.generic('Add to Bag', {\n        identifier: variantId,\n        name: 'PDP'\n      });\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\n     Analytics.screenview('ProductDetail', {\n        url: 'www.example.com/products/123'\n      });\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | number | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ContactEmail\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | to | string | **yes** |\n  | gaQueryParams | object | no |\n\n#### # ImpressionGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | name | string | **yes*** |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | list | string | no |\n  | variant | string | no |\n  | price | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # LocationDirections\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes*** |\n  | address | string | **yes*** |\n  | gaQueryParams | object | no |\n\n  \\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | brand | string | no |\n  | category | string | no |\n  | variant | string | no |\n  | coupons | string[] | no |\n  | price | string | no |\n  | quantity | number | no |\n  | index | number | no |\n  | gaQueryParams | object | no |\n\n#### # Promotion\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | name | string | **yes** |\n  | creative | string | no |\n  | slot | string | no |\n  | gaQueryParams | object | no |\n\n#### # RefundProduct\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | quantity | number | **yes** |\n  | price | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n#### # SearchGeneric\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | term | string | **yes** |\n  | count | number | no |\n  | gaQueryParams | object | no |\n\n#### # Screenview\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | url | string | **yes** |\n  | gaQueryParams | object | no |\n\n### Actions\n\n#### # ProductAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | list | string | no |\n  | gaQueryParams | object | no |\n\n#### # CheckoutAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | step | number | no |\n  | option | string | no |\n  | gaQueryParams | object | no |\n\n#### # TransactionAction\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | identifier | string | **yes** |\n  | affiliation | string | no |\n  | revenue | string | no |\n  | tax | string | no |\n  | shippingCost | string | no |\n  | coupons | string[] | no |\n  | gaQueryParams | object | no |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45'\n    }\n  }\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n* City\n* Country\n* Date\n* Postal Code\n* Region\n* State\n* Time of Day\n* Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n  | Property | Type | Required |\n  | - |:-:| :-:|\n  | propertyId | string | **yes** |\n  | environment | number | **yes** |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"7b540442d2b83ad710e98981bd368039f0eb635c","scripts":{"prepare":"tsc","tsc:watch":"tsc -w --preserveWatchOutput"},"_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"lerna/3.22.1/node@v14.19.3+x64 (darwin)","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.19.3","dependencies":{"react":"^16.13.1","url-parse":"^1.4.3","decimal.js":"^10.0.0","react-native":"^0.63.2","@brandingbrand/fsnetwork":"^10.19.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/fsfoundation":"^10.19.1","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-leanplum":"^5.0.0","@brandingbrand/react-native-google-analytics":"^2.2.0","@brandingbrand/react-native-adobe-marketing-cloud":"^0.1.1"},"publishConfig":{"registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"sinon":"^8.0.2","react-native-permissions":"^2.2.0"},"peerDependencies":{"react-native-permissions":"^2.2.0"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_10.19.1_1667497615422_0.24578171862146503","host":"s3://npm-registry-packages"}},"11.76.0":{"name":"@brandingbrand/fsengage","version":"11.76.0","license":"MIT","_id":"@brandingbrand/fsengage@11.76.0","maintainers":[{"name":"sergeykulakov","email":"sergkulak7@gmail.com"},{"name":"eberghoff","email":"evan.berghoff@brandingbrand.com"},{"name":"astgerbb","email":"andrew.stgermain@brandingbrand.com"},{"name":"bbtravisreadonly","email":"travis@brandingbrand.com"},{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"b12fa44b37bdc8fe126ea160bb8b78f041432af1","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.76.0.tgz","fileCount":111,"integrity":"sha512-b4H4fNvOYn6aphsJyXS9+VCBxbEdBCs8JeDaA27d0VZ3KvPly6nhn3na6mwkZ5i1IuwKAEVwhfSamZHK1FrNjw==","signatures":[{"sig":"MEQCIGBwDOvTuRZ/RBZmhfKAyn3gtUxymyoIwb9ckA5swcBzAiAZT7dkHkVvFv6cIIBfARTHLaK4ZIsAJG8XfDGmXX5aGg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":257496,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjZbeOACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrwEg//buKFq2eQq6mocplpKvjhv/gbuSjwNQEZy0mJZrH+tXBke4VZ\r\nq+ggHDQvGkDn3JnvBV06oVYwgG5KRIpNi4aLlfLGxLB1bpkKUcHQfDGaAZ1K\r\nf9FEeWb9BCt9N7AFeuv7aeGZ56ed5Ju68Cu6ncKlnSkoE4/epYHqlKx82Agq\r\n5/lqXL35UXGufExYof+4ZEVqtp6wf4KwrdRhFb18jnI6yVwRfeuPwZJH1mhe\r\n/HyEeRT5Sc1qbAc+7YX8d44nPDkKOy1eHEaeHTEsvXHUupkqA/q8xmD7uneY\r\nuZ/Gsd41sjxqkJ+wp7avvn5Bpd6CR3UlQVdmzD+2g1nIOJ4mKx949u8YeqL9\r\nU231OzG5LED7T6FmFeKWER/53DYyUYzYt0QTuwmlC0Ht13XI4so68xQEBYEp\r\niFJ5jEQQGGTrOc8QWieUzAbbXkIstmbj3htbEfigTCwIHVnYJ40/AXO+hQUx\r\nysSiYtfB3imEYagWzoC8KE89op+r2uA23tRwYs34nBlPXDQbMP59qKk5atez\r\ngbH+QYnLS8a/jbIg0EonfU+mJ19fOSi4REi9gjch62Xh8G9ZFCxpL+CoUUvK\r\nWjnwM0rc7qwwvmx5kCKqL9YT2/50Li+NnFuY0q+okVNI1xXT4qQ6STkwN0jS\r\nxXI9/tU+lbu+by3zZQbyGnaHzDOyciWNdvY=\r\n=65zb\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"b3a2ce8eec9c7f49a11536c81d53604113e8bfe5","typings":"./src/index.d.ts","_npmUser":{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"axios":"~0.27.2","react":"^16.14.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","reflect-metadata":"^0.1.13","@brandingbrand/fslinker":"11.76.0","@brandingbrand/fsnetwork":"11.76.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.76.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.76.0_1667610509799_0.5836809211860385","host":"s3://npm-registry-packages"}},"11.76.1":{"name":"@brandingbrand/fsengage","version":"11.76.1","license":"MIT","_id":"@brandingbrand/fsengage@11.76.1","maintainers":[{"name":"sergeykulakov","email":"sergkulak7@gmail.com"},{"name":"eberghoff","email":"evan.berghoff@brandingbrand.com"},{"name":"astgerbb","email":"andrew.stgermain@brandingbrand.com"},{"name":"bbtravisreadonly","email":"travis@brandingbrand.com"},{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"0a097fa6b64f29cec1827123606000413ede41be","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.76.1.tgz","fileCount":111,"integrity":"sha512-R59mhrQ2QkPjnTeq5uge6qSga97KK4wUuaRvXsG7jzYZX6a4h5dwY1tD81v/h1pH92C8RUKTc72kFKx8v+dvTw==","signatures":[{"sig":"MEYCIQDpuHHAjNPlHpZKFOEKYgh2XFSh8lTjaPgJiZmYTRvdeAIhAKEJ4oFFVLz3RUCD3QOnXKl5VaithXN1nZkEMQvOjXLJ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":257596,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjZywWACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpvEw/+MOOGtVhIljcRrFmI3hEjAcoVTMd9vetBGl6paJmoG231Tj4c\r\nthYKc7TV/bHpAV+nXArVtyJi0rV5whsnW8Bud2ZsidmNai7Yx1JLPCdKdzfY\r\nQg7uDcRTSf8kIqhBUiguCXdp04ZjwAJ1GUpBZlvx0XwtomgVhNWd5Dr/cFIC\r\nfzGL58o6cJKiRiTOx5ndymnbQ+T04SWHnZ1ot/eGXXMH/zRyV9umziTJPbGc\r\nBHdtBTAgKPfOfhqOpeRcCSMVnQwE5ZpK0msGT40AtqP4+TvBeHXoQrBsTocL\r\naw62AwNLtdQQkdoM4q0VCT8PQWP/U+8yO4pNdy2bAMWR7Z0YjrmZu9gWpdvQ\r\nhl3qL2m69f5r3A/SRTwiyD2/1qdI1mbPI9yWf0sDVzurigXALEB3s4i0/ALh\r\noWRqbEc5wbtV55sDGDFIt5I2OdgZDop4T5TSP/rZ6p9SJfWKgcBihEsh9OuM\r\nfjlo3RXh77pkNQumTdEnkIG2lbWarmxAU11/A3eMHB0nd4fOGRtv7BxRXGY2\r\nmZsn6eRNgoGHO22Xe5tg1WVFgafUFgTR5mQNwKq//7jERPxUM32QQgmLzeoO\r\n9JboPd1YJ5kCWyt0lXFTRlJssy0CjuZSvXmIsyhHjjNZoWnhknZT0sa1qMon\r\nGvd5YkON1uR7hpyHipqSQl0W1EPAj3CkSG4=\r\n=7Cx+\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"dd97f157e4a90ff99a99f0b481814a25947533db","typings":"./src/index.d.ts","_npmUser":{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"axios":"~0.27.2","react":"^16.14.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.4","reflect-metadata":"^0.1.13","@brandingbrand/fslinker":"11.76.1","@brandingbrand/fsnetwork":"11.76.1","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.76.1","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.76.1_1667705877936_0.17425748744819103","host":"s3://npm-registry-packages"}},"11.77.0":{"name":"@brandingbrand/fsengage","version":"11.77.0","license":"MIT","_id":"@brandingbrand/fsengage@11.77.0","maintainers":[{"name":"sergeykulakov","email":"sergkulak7@gmail.com"},{"name":"eberghoff","email":"evan.berghoff@brandingbrand.com"},{"name":"astgerbb","email":"andrew.stgermain@brandingbrand.com"},{"name":"bbtravisreadonly","email":"travis@brandingbrand.com"},{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"a3a7eaf277b664afb3a98c1aabb0c6d2deaed49b","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.77.0.tgz","fileCount":111,"integrity":"sha512-t/Yj9LOyNefhDFG4a1kIRGiXJrx9+ePzYX8EoecfbdZpn564W8roMRlIyMAmt1k2Q/yb6S0gcxkw9vwx2HA27A==","signatures":[{"sig":"MEYCIQCBa5DhdbyUpCBjKwVN79Z6z5wnWotcp2ou0FEbuUmCGQIhAMEeobxQsBDz8JYtkXw0wOcL0jZJSRy9fpWdcG3eZVwP","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":257695,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjawIhACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqWQw//b+4LJscLanOx7bb8l1A3MkC9WiU570PMjbxQ9WG+3cs+PG75\r\n4uthzhWJPcRg+5eoXDUOvb10/+oNWO/m+DGc9p2Mbp54CcFzLT6vzcd1R4Aj\r\nH8aW59YngHIhZCYMTkfr102Es03LJ2X36Rdwjm2K/BjIEL4LU4pejIC8B2fO\r\nD3Am4KcIFBaMkkiDDrEeBrKgqbeDO3dwjroM9pEJBI5MAd5yb8kCNdcvFM1W\r\nUD7hEyhwJZAQ6FRYDRPG95m8VlCvUfSAxUWufgqtuIQqDB12+89e1crB5X6l\r\nXjxObVyJbyQd1j+1CFU79M7FMoME7TeQ264sPC3E7H8Q0tkvB73nq9KMQdkS\r\nAYkBMQ8XWUJKBh9sT7tu6O8GB/KgFAh1pUa93/CFsiMmIxXstQ24BfwCd4rn\r\nM08vdokQYwxhAR/hkGPBueVQ6dXbQm2oiUadyhMt3tovoxev7VOWRnZg17DZ\r\ntdwwR50KOrczR32mW+0qnL4+rDVHr4Gve1t5U4Z3hntS82HufrhSme1WnPiY\r\nhpo37GE2C+Mef4nrkj61NmBlj1AsB9u0GZcF6yJUducs0dKZEq2K4WNdI7EP\r\nK5bcvrnz5tPgTSICCKI7tLX6OmgGXKY8lMNGCf11BBmEOJbcxljHphutGfgT\r\nNgXoXIkD2in+XgY2odckFtgkYzWQMFGldm0=\r\n=UzqU\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"26583248a0ba7429cb2c612279d46b306d2f4b12","typings":"./src/index.d.ts","_npmUser":{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"axios":"~0.27.2","react":"^16.14.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.5","reflect-metadata":"^0.1.13","@brandingbrand/fslinker":"11.77.0","@brandingbrand/fsnetwork":"11.77.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.77.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.77.0_1667957280879_0.960691308050118","host":"s3://npm-registry-packages"}},"11.77.1":{"name":"@brandingbrand/fsengage","version":"11.77.1","license":"MIT","_id":"@brandingbrand/fsengage@11.77.1","maintainers":[{"name":"sergeykulakov","email":"sergkulak7@gmail.com"},{"name":"eberghoff","email":"evan.berghoff@brandingbrand.com"},{"name":"astgerbb","email":"andrew.stgermain@brandingbrand.com"},{"name":"bbtravisreadonly","email":"travis@brandingbrand.com"},{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"c2cc1abe43d709eef870d475ce72adc1807c7026","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.77.1.tgz","fileCount":111,"integrity":"sha512-8dYFC9B3ZoRvOq6y5K6+0VqqdcIjnVqFBObb1k+RH6H5LS2Wbx0z6RizGohvzL9kBp5KhZFMxcm1AdToptOQ4g==","signatures":[{"sig":"MEQCIAl/gk4ahELpz/5SfU6XvQf/4zZEJovq0V5GRKNl3EFgAiA3Cjg9oZdCoZj56gReJywINNZBkIkFjTtAoTcZEMoixw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":257795,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjdDqaACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqotg//QPJr6/DQ2DWeWhuhUQH9bhPUWeA5Gpakhv7SvYuYCdke5cfD\r\nckIJwZeX27RwMYesZSu7aSRG1m5g2fC3puKMVTKIK64MSkdiQR6sB6SEn+r5\r\n+PUWF5HfHCI3tn59/xnXzr3bdFyFi/ykiGpeeZT9+MqqrPIqBNg92i5T09Uw\r\nmVq7ITUBuipIu6vnERb7y03xYL3olQY4cbU4kZqOE59c8/9KsI6vdclWGSnL\r\nNQ3QpCYcxKlXKnEfDqzwheHIRDx334J97PNkKzezN+Crt3L/I8Mp/N1nMKNk\r\nNIXjdIo7VhevTaE1T26XIlLg7w8ln8CPuC1dT2O5h2d/UXaTGUnfB6yeMISn\r\nLlV2HingMJCnZWWmJOyXwoC9nrhKfldt4KpklllvcB4d4n3PAx4Ikbluc+Aj\r\n7e0HXhkozv/ptk5yKhahGzVw18RN/Zc2UmzWN/sm0GsKkgRCN+12tOymwRap\r\n+wIJFD/SMMlh4pVz9nglGsezr5DdHcpbnADPQoc4flXVXyn1qs0sjHDa8l3/\r\n2GEVCKOIHsJAzqb7kdmLFfvViJAOjStfNihV6tkS78DgrkUVybDyf1SOyNj/\r\n07PcA7a4WzQEjCHfXLmXr5+3lG0z/eRnogEp/FM6MREGFroB8/bYal1gIggR\r\nTKK9xhfsgt8QtYbReDGPoAZrbSdrg+kW3oo=\r\n=Ief2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"9f783c912a3cb5597c9a0484a4a75fa0538e31b1","typings":"./src/index.d.ts","_npmUser":{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"axios":"~0.27.2","react":"^16.14.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.5","reflect-metadata":"^0.1.13","@brandingbrand/fslinker":"11.77.1","@brandingbrand/fsnetwork":"11.77.1","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.77.1","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.77.1_1668561562642_0.8684877274678287","host":"s3://npm-registry-packages"}},"11.78.0":{"name":"@brandingbrand/fsengage","version":"11.78.0","license":"MIT","_id":"@brandingbrand/fsengage@11.78.0","maintainers":[{"name":"eberghoff","email":"evan.berghoff@brandingbrand.com"},{"name":"astgerbb","email":"andrew.stgermain@brandingbrand.com"},{"name":"bbtravisreadonly","email":"travis@brandingbrand.com"},{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"huizhuz","email":"huizhuz@outlook.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"7a6f5495f7714f80b22969483d1cc718044dbf27","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.78.0.tgz","fileCount":111,"integrity":"sha512-vcKCxD0SbX4+kWBy5L24BwJQ67/0OBCM+vXfo8gtQAZgJZ0hboXM4aD+Yum79ZC17K1/wdYikfWsnQ5X9wq88w==","signatures":[{"sig":"MEYCIQD9kQcC9Ajx/n9PkSk5deD+R+vJ6Z7CnGXlsEkg3ayJFwIhALSauRorurQlwnBuk5mgr2lsLkP0JWmM8PrpsMMzX3Fl","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":257894,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjnMxkACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpQVxAAhFe7HxbyJBgPxf56NTqbT4A5L2fxDtu5EA+6IDqyTEpeyuPf\r\n7/e1qP/OgSXj5XG0RQbksYvUHlpBoXN/eXbxemvyI02tezjq6Th//Y8eD64I\r\nh2OAadx2iI0mVRd6doc+ZEcnZJyZaxOOKmzWDSbOZ3yhCzwZQsHJGUihxbGX\r\n0Ul5NDwaTJUSu0ViQG65ivfzLR4S5VzyDZWT4rOarpioJACuXQvJOOWeyhwt\r\nen4iLUqdfU0NGiRpH5GQ6PuosmX6KQ0Gm0aqdnDqFERG8sXnrMhPkrMevfH8\r\nlOWSHeumgGeM2DBfc5wixH4UMSRpRXRWo5r3kJo8DiyVJhU/oZ6wpDPGteHt\r\nCaLDHytYLlbyHv3uEQz0xljm0nZK+h20DoYeCH7RziaduNDSidxUXS4aa0k/\r\nQKKfNldmBSm/I+3wcABR4ZlmRN5/ggUqa60PDnwFFrvQLvINlRM5UikEkxMi\r\nLBRADly9O0cgb4fDEfCzgi6KE6Cj/BNhrsGTgr2W88Y8hjq9/MqNXdUNz0I4\r\nMuXlcIyS/PUyHUFe1o1QfpP+NNQvjqXBAM65QSmu10EPLicRfCclcNE7jtnI\r\nU60I2oV0Gp9R7WJrEIkFFW08h36Dqqau8Zs7tSWdA1DYRy1ufEes4Ec4xxxE\r\nDHRXfjjaA5eAd4lKWeEvnzWWgeDw5lVF0qM=\r\n=9Sqx\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"42cd3fe92814616c0c6379d1cf70258f58554df1","typings":"./src/index.d.ts","_npmUser":{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.19.0","dependencies":{"axios":"~0.27.2","react":"^16.14.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.5","reflect-metadata":"^0.1.13","@brandingbrand/fslinker":"11.78.0","@brandingbrand/fsnetwork":"11.78.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.78.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.78.0_1671220324379_0.22291729621120648","host":"s3://npm-registry-packages"}},"11.79.0":{"name":"@brandingbrand/fsengage","version":"11.79.0","license":"MIT","_id":"@brandingbrand/fsengage@11.79.0","maintainers":[{"name":"eberghoff","email":"evan.berghoff@brandingbrand.com"},{"name":"astgerbb","email":"andrew.stgermain@brandingbrand.com"},{"name":"bbtravisreadonly","email":"travis@brandingbrand.com"},{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"32e2ea1f78c54f65b8becfee62ca60b604ecf80d","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.79.0.tgz","fileCount":111,"integrity":"sha512-24DPs/0QuVfRsXvi2mozT2WPurxpbVS9Dy4W8NMeOzp5MbvOJiS/yGyLO8R/ocNJlqMOer8JYsxBU/RMBxn7AQ==","signatures":[{"sig":"MEQCIC39qHIzn+GXqT0223rLzWOiOs8j840RZZWPeO/LVrgqAiB2ms7gZSVFMKukNXRNui2b8fs+iqJ9I5M+RzhLyuU7Xg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":257993,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjwbWqACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrIHhAAmMA9i8SAYLjGQvEdN2tlHyGxVvG44bfakv7hAt9RB4xtybBd\r\nXrRXtk6LcgIzADPZSN2qt2OtueIYwEwOA4y9REs8UqgFvhLSkcB9taa93SuQ\r\nCCNvfGXqsqmqn5/grPGFX9Fe7ATEmxJZzfKqy4QBZ99/DlpRUzyi/3ESz67c\r\nEaaQ5kWuVOF+2El2tQubATze10Y/2/pMjVz5dN5gnKdYgY7gN+oIhrEZfuQh\r\nTiH5YgAObMyUzp9utbsUpx2/siv7QKuOg6QpXJgLffG86QdsMRE7XyGFv39r\r\nAwOGuoj1cz8Pc77u1o0vXH7WRAj2AFtqDi1ZFdoFuddBJiaNavX39UUr3jIQ\r\nTKnyY3TAWhMYqUmgMMoOAU3Cd1A/yJAANRfeGP/H8IxB7EZ3Yqtsvt1OwGqS\r\n7LEFLt3UdfZugNXKH2edX47spygVpvQOassJ1HclvVYh1OlPdfFDmx0xRB8j\r\nR7ml8e1KmqUEQNnajgP6fF7Q3010eJViTFyX2rHhflHhWTsBBtiGG69epaWm\r\nDZGFJnI7ad2G/4EVLstiE6X6VphrxMqBsx3Cqe9MColHKzlGClwQzNNGY4Go\r\no+NSj8ZGoTk9gM/iu6qw5R0/WmyVlrV735BzoPefEcrnLxmrS8eHcJg0649y\r\nJ4RyaI4ZKu3Yc5vBRjK1Sf5F4o7QY4CK0HM=\r\n=2kIN\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"117fad06337be12ac7d5ae802fca66bdc9a61326","typings":"./src/index.d.ts","_npmUser":{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"axios":"~0.27.2","react":"^16.14.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.5","reflect-metadata":"^0.1.13","@brandingbrand/fslinker":"11.79.0","@brandingbrand/fsnetwork":"11.79.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.79.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.79.0_1673639338716_0.9834517622871102","host":"s3://npm-registry-packages"}},"11.80.0":{"name":"@brandingbrand/fsengage","version":"11.80.0","license":"MIT","_id":"@brandingbrand/fsengage@11.80.0","maintainers":[{"name":"oscar.mejia","email":"oscar.mejia@brandingbrand.com"},{"name":"eberghoff","email":"evan.berghoff@brandingbrand.com"},{"name":"astgerbb","email":"andrew.stgermain@brandingbrand.com"},{"name":"bbtravisreadonly","email":"travis@brandingbrand.com"},{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"e06100f4f70425d05ba85e50973745e20166c634","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.80.0.tgz","fileCount":111,"integrity":"sha512-v3cglAx+23EZ/xuijVIeWCnOMPR4Yy126ct5nB2UDRAT+BtiJw39W2W79T9FPNoFZrpP+jMiN8ZEPtwQgl/log==","signatures":[{"sig":"MEUCIQCL2ESlaSpeV5UUn+udxQzf9uG3d8q/947Dawadbh69WgIgP853aOS7cr1GB+P4seLwIXGSouuN1HAYhlCZRz7HhzA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":258092,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj0YdFACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmozHA//VuFLlF/+psrh293jvaDR7nUSJQT+M3zvhbtj+v89PBHzrPFE\r\nYeUC/nHtP3AKBNPJljbpxvKSh8Q3cyHRHBUdS5UBxbdI1Rd4ssfwvv7H5gbK\r\nBGLlSRQG0Or+Q9vKFZIBTEFEe1HcIqGMwvKfzmQFzGS5o8O+sWSHsy+8YHLQ\r\nLe09aHfxU9yLwiaSuf+vGUjcAaAQPLUlxIGwl3KtjbQ4ckz4yvNgRGPKnmsl\r\n7VfMSZ3YQABizO9XwAEOFcbgPnic7H2RJPOzrizV5Y/9iZ+ZV0GND+/bceP3\r\n8GCQg7il3sH28IHFrTdUMdHkM+4SBWsfZbk3n+HCJp1MAea/YQe8nSGe0dNw\r\nKBEift0aMLG+j2JDj8kV9V/GCmCRsWL7NHKutH1VE2vxK8zzEyhk801Nwam4\r\nT4hQc7cTVKbvG0La8jkx47PzHP32tf8WSomWZ/LvscYamEKugdtgEuKtOXhj\r\nd5NZ3zD5cea/lkKQIlUk+YadITTbLPst5NZZZpDJO45uIGjOPuRoNkBg21Mv\r\n6Ni5O7PkhaOSzeM5T3gIkX1yug2bqs/hz6hSARN0s8mXn65lEzX1Dae0NcNU\r\nFS3zZs+hE1ScgTDwzIrY5V1MJq8MrCNhebDEY3/nlJQHqPcgmuDAkens5cSm\r\nGSc24KEw8ktcF5DxlYpGNaUHJo6wdcLw5v0=\r\n=yx5D\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"e5e7f36488f2b7c8120fb4b03865137308cd61c6","typings":"./src/index.d.ts","_npmUser":{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"axios":"~0.27.2","react":"^16.14.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.5","reflect-metadata":"^0.1.13","@brandingbrand/fslinker":"11.80.0","@brandingbrand/fsnetwork":"11.80.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.80.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.80.0_1674676037015_0.6888454798298846","host":"s3://npm-registry-packages"}},"11.81.0":{"name":"@brandingbrand/fsengage","version":"11.81.0","license":"MIT","_id":"@brandingbrand/fsengage@11.81.0","maintainers":[{"name":"oscar.mejia","email":"oscar.mejia@brandingbrand.com"},{"name":"eberghoff","email":"evan.berghoff@brandingbrand.com"},{"name":"astgerbb","email":"andrew.stgermain@brandingbrand.com"},{"name":"bbtravisreadonly","email":"travis@brandingbrand.com"},{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"},{"name":"elad.karni","email":"elad.karni@brandingbrand.com"}],"dist":{"shasum":"45cd58b7ef6cb8f69bd5c10b5b7cb6c4c80e5311","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.81.0.tgz","fileCount":111,"integrity":"sha512-rp4SGo6lI5vY6co3SqQWKragQ498bogNFy8hik3mE2Mz6gfD/LJWrvr0eoCV7f3J4sJvQNBrmWB4UyvEN6wIcQ==","signatures":[{"sig":"MEYCIQChUPUCUNiLLswU9hS3MEIeayAQ44IJhvb12/M4efyyiwIhAMWdGcwaX3GahSOzQMPH/TKdhjpPyfu9is3fdlWGrEEi","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":258191,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj2p/MACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoCtA//RmrZWrDgIdRp+IoAtkkQXem+omtlIYtqlB7t+R51jkcJ72Bc\r\ntFypgTMSGLhMlVtTVFxZvO4NY2KBgyiTytU4YIichGd75zbh+0i91ta/XDqC\r\nCwltHi7GEWb4rkBKBwDacuTslktyqu+f9+5I9sqGjKFggV+cxwvGMn2t3rsT\r\n+LB7XR6UvGwv+pCRTzyZiCIz0vx49Lf0zc03v2yPkPW+hG2p0vyszUzO0H/U\r\nAvq0ijodGNPoPP3suhjWFdkb0XTY0kjPqrL15bsHwg5YR72zjwENwAdUrTOG\r\noShiPO8jtPQUd5mBX0cZ4yhFq8buuKKbvkmMXkuTs3ajohs3uplUzH2GI6fc\r\nYkjn7ndn2ogVqRXgiueT3ZqF/IbuUlqH5QOTZWOAGjN/9ziC7TTStc8+O2FF\r\nIRA6xcCua75gtjFRu2SKwIK7thz7V61fU7NOSTRmul7rEH/iOUHtvdOvxhEI\r\naq0fwyKC5m3zNqRZw0q75CPnn93khBtcwe7T+e2xc+XxAMYXu8e6aDEBjsWJ\r\nwujkgT3NC/beqYMDr44Hs+NKALEpyv6elQkPRrEipd2xVptNHW8HXwh7yYhO\r\nVVCXSSljM4xnzRpS9nSYj0FKyPXXewN2Kldk0DsGylJL2oRJQpQahJ/FBCSD\r\ne+895LqsfISoJ+YvPp5q8gNFtIN/S28gW9c=\r\n=sa4n\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","gitHead":"0ec434ade7de07fa108f658f969550ae60b50e66","typings":"./src/index.d.ts","_npmUser":{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.2","dependencies":{"axios":"~0.27.2","react":"^16.14.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.5","reflect-metadata":"^0.1.13","@brandingbrand/fslinker":"11.81.0","@brandingbrand/fsnetwork":"11.81.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.81.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.81.0_1675272140232_0.15970750951846835","host":"s3://npm-registry-packages"}},"12.0.0-alpha.6":{"name":"@brandingbrand/fsengage","version":"12.0.0-alpha.6","license":"MIT","_id":"@brandingbrand/fsengage@12.0.0-alpha.6","maintainers":[{"name":"larafawz","email":"lara.fawz@brandingbrand.com"},{"name":"dannybelcher","email":"dannybelcher@att.net"},{"name":"christian-bb","email":"christian.wong@brandingbrand.com"},{"name":"diaw.psd","email":"papa.diaw@brandingbrand.com"},{"name":"oscar.mejia","email":"oscar.mejia@brandingbrand.com"},{"name":"eberghoff","email":"evan.berghoff@brandingbrand.com"},{"name":"astgerbb","email":"andrew.stgermain@brandingbrand.com"},{"name":"bbtravisreadonly","email":"travis@brandingbrand.com"},{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"fearthedev","email":"jshoff1107@gmail.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"}],"dist":{"shasum":"28b5ce2f5ad4444c2f31d85f336e4cc51333858b","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-12.0.0-alpha.6.tgz","fileCount":111,"integrity":"sha512-oiw/iuKjo4dEq0Vow1ZxglupODX14LbsvdO9i6FmE1qDz4z90pJcmkgvnyWtFPw6JMCsp1mC7SRSlZ5OnbeSbA==","signatures":[{"sig":"MEQCID/m2vsrcG/lMikvLPbL60+y0LnX1VpVLu23C4wtjoJPAiBfLpdlRLArI3lO/NOasZfiXcwvI3K3sx2hEMJJbEMA2g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":258158,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkJOmqACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoGyQ//Xz034VX0ReZnE0lA+BJwpRwuGDkwLUy/DIiS6TGS6AyrLR3c\r\nrI2hrMpqTNrWyJcC4J5oNmL8PJUOwYz9S9diqmYVy1OZwOu8O3Lfcl3lnigr\r\nZxQA+0/5d60Z0tdRupb115j8pLQyFfDz49ctvESk/EDce4Oafgjoo3qG+X20\r\nXgPUrShWNHoiRg5Nwdl7V8u6pbVQNPim147yq03alia6XLWE4JkDaw1Ak7tW\r\nf7vZALTKLM96JlelQuVa485h+DFNdCXO2iLFLgMc8wKoJ+esuhCYXFuWQnbg\r\nTB6cmJXvbv5pJmFObWCq84OWOEHGJVIEcwHtq00gqnuruWNL7YyQKFS2EFLb\r\nszLCjrqq4sdV6fMMmgWOCvTTRB2gfiqtLtrtPgB0+420WXOAu+/ro/2cDw/l\r\nPlhcWtW98TccCgt0JT385EHq6HlXZP9+5NG+wEpjAGTbFL5kg6AZXY/VhReF\r\nU/ONJx5FG2LtgbTZ5MyI2F1n/UWaGNvTuK4X5KvoU3mfmVIJmlyeLSCbcxON\r\n8QZpgy+B7cVzxj7fRgUIzQxJcDINpVVP5vJoTNi3hzhBzxkavz7XAR+oDBVe\r\nm8Hg7GveJwP8uLr5SZlCPEsjuchajICaHknzkcg62dEnBwvF489svQNyNctR\r\nWSq0U3jDYI17XhspTAzlzalHpS3yJ085Iq8=\r\n=1IXq\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\nwill support Demandware.\n\n- [Analytics](#analytics)\n  - [Analytics Providers](#analytics-providers)\n  - [Analytics Providers Configuration](#analytics-configurations)\n    - [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    - [Leanplum](#LeanplumProviderConfiguration)\n    - [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    - [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  - [Analytics Constructors](#analytics-constructors)\n  - [Analytics Tracking](#tracking-functions)\n    - [Ecommerce Function Signatures](#ecommerce)\n    - [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    - [App Lifecycle Function Signatures](#app-lifecycle)\n    - [Full List of Property Parameters for Tracking](#parameters)\n    - [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n- [CMS](#cms)\n  - [CMS Providers](#cms-providers)\n    - [Core](#core)\n    - [Demandware](#demandware)\n  - [CMS API](#cms-api)\n    - [CMS Configurations](#cms-configurations)\n    - [CMS Constructors](#cms-constructors)\n    - [Functionality](#cms-constructors)\n- [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n**Warning**: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n| Property       |  Type  | Required |\n| -------------- | :----: | :------: |\n| userAgent      | string | **yes**  |\n| osType         | string | **yes**  |\n| osVersion      | string | **yes**  |\n| appName        | string | **yes**  |\n| appId          | string | **yes**  |\n| appVersion     | string | **yes**  |\n| appInstallerId | string |    no    |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| clientId      | string | **yes**  |\n| clientSecret  | string | **yes**  |\n| reportSuiteId | string | **yes**  |\n\n**Note**: This configuration just applies for web environments. For native environment\nconfiguration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n| Property     |  Type  | Required |\n| ------------ | :----: | :------: |\n| trackerId    | string | **yes**  |\n| clientId     | string | **yes**  |\n| trackerName  | string |    no    |\n| cookieDomain | string |    no    |\n\n#### # LeanplumProviderConfiguration\n\n| Property              |  Type  | Required |\n| --------------------- | :----: | :------: |\n| appId                 | string | **yes**  |\n| key                   | string | **yes**  |\n| monetizationEventName | string |    no    |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version,\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID(),\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\n\nconst analytics = new Analytics([google]);\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\nand begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\nyou might want to add a click tracker to your 'Add To Cart' button. It's as simple as adding the\nfollowing code to your success handler (assuming you only want to tracks successful adds):\n\n```javascript\nAnalytics.click.generic('Add to Bag', {\n  identifier: variantId,\n  name: 'PDP',\n});\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\nAnalytics.screenview('ProductDetail', {\n  url: 'www.example.com/products/123',\n});\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| name          | string | **yes\\*** |\n| index         | number |    no     |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| number        | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n#### # ContactEmail\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| to            | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n#### # ImpressionGeneric\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| name          | string | **yes\\*** |\n| index         | number |    no     |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| identifier    | string | **yes**  |\n| name          | string | **yes**  |\n| brand         | string |    no    |\n| category      | string |    no    |\n| list          | string |    no    |\n| variant       | string |    no    |\n| price         | number |    no    |\n| index         | number |    no    |\n| gaQueryParams | object |    no    |\n\n#### # LocationDirections\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| address       | string | **yes\\*** |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| name          |  string  | **yes**  |\n| brand         |  string  |    no    |\n| category      |  string  |    no    |\n| variant       |  string  |    no    |\n| coupons       | string[] |    no    |\n| price         |  string  |    no    |\n| quantity      |  number  |    no    |\n| index         |  number  |    no    |\n| gaQueryParams |  object  |    no    |\n\n#### # Promotion\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| identifier    | string | **yes**  |\n| name          | string | **yes**  |\n| creative      | string |    no    |\n| slot          | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # RefundProduct\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| quantity      |  number  | **yes**  |\n| price         |  string  |    no    |\n| coupons       | string[] |    no    |\n| gaQueryParams |  object  |    no    |\n\n#### # SearchGeneric\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| term          | string | **yes**  |\n| count         | number |    no    |\n| gaQueryParams | object |    no    |\n\n#### # Screenview\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| url           | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n### Actions\n\n#### # ProductAction\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| list          | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # CheckoutAction\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| step          | number |    no    |\n| option        | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # TransactionAction\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| affiliation   |  string  |    no    |\n| revenue       |  string  |    no    |\n| tax           |  string  |    no    |\n| shippingCost  |  string  |    no    |\n| coupons       | string[] |    no    |\n| gaQueryParams |  object  |    no    |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45',\n    },\n  },\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n- City\n- Country\n- Date\n- Postal Code\n- Region\n- State\n- Time of Day\n- Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n| Property    |  Type  | Required |\n| ----------- | :----: | :------: |\n| propertyId  | string | **yes**  |\n| environment | number | **yes**  |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"8ba313735c510c727c34007017d3eee25384c71e","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"9.6.2","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"16.13.1","dependencies":{"axios":"0.24.0","react":"18.1.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"0.70.6","reflect-metadata":"^0.1.13","@brandingbrand/fslinker":"12.0.0-alpha.6","@brandingbrand/fsnetwork":"12.0.0-alpha.6","@leanplum/react-native-sdk":"1.3.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"12.0.0-alpha.6","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_12.0.0-alpha.6_1680140714156_0.3480197532220617","host":"s3://npm-registry-packages"}},"12.0.0-alpha.7":{"name":"@brandingbrand/fsengage","version":"12.0.0-alpha.7","license":"MIT","_id":"@brandingbrand/fsengage@12.0.0-alpha.7","maintainers":[{"name":"larafawz","email":"lara.fawz@brandingbrand.com"},{"name":"dannybelcher","email":"dannybelcher@att.net"},{"name":"christian-bb","email":"christian.wong@brandingbrand.com"},{"name":"diaw.psd","email":"papa.diaw@brandingbrand.com"},{"name":"oscar.mejia","email":"oscar.mejia@brandingbrand.com"},{"name":"eberghoff","email":"evan.berghoff@brandingbrand.com"},{"name":"astgerbb","email":"andrew.stgermain@brandingbrand.com"},{"name":"bbtravisreadonly","email":"travis@brandingbrand.com"},{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"lazerporter_bb","email":"lazer.porter@brandingbrand.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"nevidomskii","email":"nevidomskiy8@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"andrey_ionel","email":"andrey.ivanov688@gmail.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"}],"dist":{"shasum":"dbda005b58c29e5a1d7eb08c70a783d493417fb9","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-12.0.0-alpha.7.tgz","fileCount":111,"integrity":"sha512-UbMykXp9pAha2dPkVhnGidtUnyk0HBmv62KlA0OJrFxwCikZ5N3hmK6/dUCQ0ToP9sH3LbfycxQ0PSL5Io3qqw==","signatures":[{"sig":"MEYCIQDDiYZUNNn795PoADX0qTvWglwVdsBRhPoUW58X6Qh7MAIhAOnIC2k4mKKNVa/v8JlvO+VyAl86jl+jwzsJ5GNy4RIH","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":258158,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkJxB5ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoEPw//VRRzsi9GQaQEVQyF3KTuhYhZJctNOaVCW3XZ7BOZWuOl3ILQ\r\n8OmAPEyvdfKu2tq4BwjS2wR1W6Pbnmwk1whgiw/mGyeyjl7OpQmZCh8B62f0\r\n7EJI6e48dgoliyv6c4KRyvp6lZwVcq2p5uex9y7AQ9t0wrMJJgiiuOMDtSo9\r\nmCS25pCQ1O+FSdOwxKO7SspKGzsg6GlTL/CJkoI9KVfzm7ecVJZ1RHbGcON3\r\nRAfHzewOS88swwuiO5glSIbZDa81T//2unDfSYH4vOAk+CZPyD04u4YNpPxg\r\nubr6LDQUrGwHFBlzHVuLxEJiyuKigk9Sp+O4x+IekXBXEx/0z+aBxFSn0D1K\r\nNiEqbwfftscMKwhFEoWebrWNwH1fLuLeB8VV67LPImmEr+nDrhiCMHIakaVH\r\nZwkWfs2OvInz9MU5A25jKSI/B7s2hajWVmrXTR93sSfJGbaB1cxYqDmTC/kX\r\ny0QXR3LL0CUnbzniZxs/Bx2f07L07tcXuKMBump1neqVPZLchUONWB3/0gSA\r\nruwsr14PFy+Bnir1o4+jXPQUZ7WxtHIx9L5LKKPsyOjgpsBOjhlRQV3tp+HN\r\nNARnA0nfGTgdTldwcd5HgU967WieW4L0sCXsMmsvyj17M/iP8CSp6V7sPktg\r\ntEUOwGuFVcTfOgkoC7jaH/AKccb0cJHQB60=\r\n=NXMs\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\nwill support Demandware.\n\n- [Analytics](#analytics)\n  - [Analytics Providers](#analytics-providers)\n  - [Analytics Providers Configuration](#analytics-configurations)\n    - [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    - [Leanplum](#LeanplumProviderConfiguration)\n    - [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    - [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  - [Analytics Constructors](#analytics-constructors)\n  - [Analytics Tracking](#tracking-functions)\n    - [Ecommerce Function Signatures](#ecommerce)\n    - [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    - [App Lifecycle Function Signatures](#app-lifecycle)\n    - [Full List of Property Parameters for Tracking](#parameters)\n    - [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n- [CMS](#cms)\n  - [CMS Providers](#cms-providers)\n    - [Core](#core)\n    - [Demandware](#demandware)\n  - [CMS API](#cms-api)\n    - [CMS Configurations](#cms-configurations)\n    - [CMS Constructors](#cms-constructors)\n    - [Functionality](#cms-constructors)\n- [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n**Warning**: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n| Property       |  Type  | Required |\n| -------------- | :----: | :------: |\n| userAgent      | string | **yes**  |\n| osType         | string | **yes**  |\n| osVersion      | string | **yes**  |\n| appName        | string | **yes**  |\n| appId          | string | **yes**  |\n| appVersion     | string | **yes**  |\n| appInstallerId | string |    no    |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| clientId      | string | **yes**  |\n| clientSecret  | string | **yes**  |\n| reportSuiteId | string | **yes**  |\n\n**Note**: This configuration just applies for web environments. For native environment\nconfiguration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n| Property     |  Type  | Required |\n| ------------ | :----: | :------: |\n| trackerId    | string | **yes**  |\n| clientId     | string | **yes**  |\n| trackerName  | string |    no    |\n| cookieDomain | string |    no    |\n\n#### # LeanplumProviderConfiguration\n\n| Property              |  Type  | Required |\n| --------------------- | :----: | :------: |\n| appId                 | string | **yes**  |\n| key                   | string | **yes**  |\n| monetizationEventName | string |    no    |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version,\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID(),\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\n\nconst analytics = new Analytics([google]);\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\nand begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\nyou might want to add a click tracker to your 'Add To Cart' button. It's as simple as adding the\nfollowing code to your success handler (assuming you only want to tracks successful adds):\n\n```javascript\nAnalytics.click.generic('Add to Bag', {\n  identifier: variantId,\n  name: 'PDP',\n});\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\nAnalytics.screenview('ProductDetail', {\n  url: 'www.example.com/products/123',\n});\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| name          | string | **yes\\*** |\n| index         | number |    no     |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| number        | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n#### # ContactEmail\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| to            | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n#### # ImpressionGeneric\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| name          | string | **yes\\*** |\n| index         | number |    no     |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| identifier    | string | **yes**  |\n| name          | string | **yes**  |\n| brand         | string |    no    |\n| category      | string |    no    |\n| list          | string |    no    |\n| variant       | string |    no    |\n| price         | number |    no    |\n| index         | number |    no    |\n| gaQueryParams | object |    no    |\n\n#### # LocationDirections\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| address       | string | **yes\\*** |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| name          |  string  | **yes**  |\n| brand         |  string  |    no    |\n| category      |  string  |    no    |\n| variant       |  string  |    no    |\n| coupons       | string[] |    no    |\n| price         |  string  |    no    |\n| quantity      |  number  |    no    |\n| index         |  number  |    no    |\n| gaQueryParams |  object  |    no    |\n\n#### # Promotion\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| identifier    | string | **yes**  |\n| name          | string | **yes**  |\n| creative      | string |    no    |\n| slot          | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # RefundProduct\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| quantity      |  number  | **yes**  |\n| price         |  string  |    no    |\n| coupons       | string[] |    no    |\n| gaQueryParams |  object  |    no    |\n\n#### # SearchGeneric\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| term          | string | **yes**  |\n| count         | number |    no    |\n| gaQueryParams | object |    no    |\n\n#### # Screenview\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| url           | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n### Actions\n\n#### # ProductAction\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| list          | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # CheckoutAction\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| step          | number |    no    |\n| option        | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # TransactionAction\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| affiliation   |  string  |    no    |\n| revenue       |  string  |    no    |\n| tax           |  string  |    no    |\n| shippingCost  |  string  |    no    |\n| coupons       | string[] |    no    |\n| gaQueryParams |  object  |    no    |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45',\n    },\n  },\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n- City\n- Country\n- Date\n- Postal Code\n- Region\n- State\n- Time of Day\n- Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n| Property    |  Type  | Required |\n| ----------- | :----: | :------: |\n| propertyId  | string | **yes**  |\n| environment | number | **yes**  |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"8ba313735c510c727c34007017d3eee25384c71e","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"9.6.2","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"16.13.1","dependencies":{"axios":"0.24.0","react":"18.1.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"0.70.6","reflect-metadata":"^0.1.13","@brandingbrand/fslinker":"12.0.0-alpha.7","@brandingbrand/fsnetwork":"12.0.0-alpha.7","@leanplum/react-native-sdk":"1.3.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"12.0.0-alpha.7","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_12.0.0-alpha.7_1680281721440_0.7433565966883948","host":"s3://npm-registry-packages"}},"12.0.0-alpha.8":{"name":"@brandingbrand/fsengage","version":"12.0.0-alpha.8","license":"MIT","_id":"@brandingbrand/fsengage@12.0.0-alpha.8","maintainers":[{"name":"larafawz","email":"lara.fawz@brandingbrand.com"},{"name":"dannybelcher","email":"dannybelcher@att.net"},{"name":"christian-bb","email":"christian.wong@brandingbrand.com"},{"name":"diaw.psd","email":"papa.diaw@brandingbrand.com"},{"name":"oscar.mejia","email":"oscar.mejia@brandingbrand.com"},{"name":"eberghoff","email":"evan.berghoff@brandingbrand.com"},{"name":"astgerbb","email":"andrew.stgermain@brandingbrand.com"},{"name":"bbtravisreadonly","email":"travis@brandingbrand.com"},{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"}],"dist":{"shasum":"23b475d9bf4851ab8499bdb0a9b7580ab29fa203","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-12.0.0-alpha.8.tgz","fileCount":111,"integrity":"sha512-Sf84+VgFSVuFDRCKzwiVY+bq7YWa/PEOK8QYAOTDShYlHlLL2zm7eQTHliuKTQ3FqdpQWyEILU4uCcBN3SbTfw==","signatures":[{"sig":"MEYCIQDmKElGNnh3fB066OWhLxvv6QEIuTWZdYG1wfB4jsHUjwIhAIw2hHlmrhnJKZi1RVWhyBt06OVNrd4j7ARtleTbSVOC","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":258150,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkLyOEACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpHOA//SnmZYZcHupe/SG5SEL1JH/5iFIrHpKL0ZhEsdLZ+5+3CcNV2\r\n8cPti+aMPot3MZ+afLbdDMNOEuDbsSV2IgJ9p2oKyO84HFRw3qFnZBAKewr2\r\nsrzQ44gp1CTlK6xO6ipZ/V93gzNkL7HYI7nlfu/wSgpoUcPwl/d7OpZbSxC0\r\nPvDXIFGiiPAMc4EfNyPfFBMrERdgdvUSd+iQgI846Sialshb3iTzo5fzZQQZ\r\n0MBrDVmg37QhL6u/AnLW+qLwtsz6hJSkbmkZkrn4zufVdftyN7TN1S+MKPqe\r\nhS3VQsgSJ4CjGK+2/SA7qam/tjRzlQzXziqM/vJbVHQVprDAJ8OcVOGtWVae\r\nm1nPoJIrrfXHsTL0W2b4vZ2vGdsF1WBC2RSHQPqrjDEhZlFG/re2bLRmFYV5\r\nsSDlZ+rOCXld9tZWzVnukbqqsHB8tK2bKOE95iTaDSSmVRiNSpHtCi/haTsZ\r\ncBBPsivKXWVcoTIB18Ry6hbhxn4dVwEUmmoE+8v2exLCZdp9Vwt1aYhT/zvT\r\nWg3pPsLTLlZzJuqtRLewkv4QkVyMOiizsljz4Szg4ReJqXIF6zUVoQoGwVC1\r\nLVnrtNlWBrEiga1jBRWwujdPUP5e9HbcAboCv1j9hIkyetETo24SaaXuuFEB\r\nWQsDOrXsNPXWRkJmM1ksaOqMsQrR7rxbqrc=\r\n=VccN\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\nwill support Demandware.\n\n- [Analytics](#analytics)\n  - [Analytics Providers](#analytics-providers)\n  - [Analytics Providers Configuration](#analytics-configurations)\n    - [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    - [Leanplum](#LeanplumProviderConfiguration)\n    - [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    - [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  - [Analytics Constructors](#analytics-constructors)\n  - [Analytics Tracking](#tracking-functions)\n    - [Ecommerce Function Signatures](#ecommerce)\n    - [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    - [App Lifecycle Function Signatures](#app-lifecycle)\n    - [Full List of Property Parameters for Tracking](#parameters)\n    - [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n- [CMS](#cms)\n  - [CMS Providers](#cms-providers)\n    - [Core](#core)\n    - [Demandware](#demandware)\n  - [CMS API](#cms-api)\n    - [CMS Configurations](#cms-configurations)\n    - [CMS Constructors](#cms-constructors)\n    - [Functionality](#cms-constructors)\n- [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n**Warning**: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n| Property       |  Type  | Required |\n| -------------- | :----: | :------: |\n| userAgent      | string | **yes**  |\n| osType         | string | **yes**  |\n| osVersion      | string | **yes**  |\n| appName        | string | **yes**  |\n| appId          | string | **yes**  |\n| appVersion     | string | **yes**  |\n| appInstallerId | string |    no    |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| clientId      | string | **yes**  |\n| clientSecret  | string | **yes**  |\n| reportSuiteId | string | **yes**  |\n\n**Note**: This configuration just applies for web environments. For native environment\nconfiguration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n| Property     |  Type  | Required |\n| ------------ | :----: | :------: |\n| trackerId    | string | **yes**  |\n| clientId     | string | **yes**  |\n| trackerName  | string |    no    |\n| cookieDomain | string |    no    |\n\n#### # LeanplumProviderConfiguration\n\n| Property              |  Type  | Required |\n| --------------------- | :----: | :------: |\n| appId                 | string | **yes**  |\n| key                   | string | **yes**  |\n| monetizationEventName | string |    no    |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version,\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID(),\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\n\nconst analytics = new Analytics([google]);\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\nand begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\nyou might want to add a click tracker to your 'Add To Cart' button. It's as simple as adding the\nfollowing code to your success handler (assuming you only want to tracks successful adds):\n\n```javascript\nAnalytics.click.generic('Add to Bag', {\n  identifier: variantId,\n  name: 'PDP',\n});\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\nAnalytics.screenview('ProductDetail', {\n  url: 'www.example.com/products/123',\n});\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| name          | string | **yes\\*** |\n| index         | number |    no     |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| number        | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n#### # ContactEmail\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| to            | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n#### # ImpressionGeneric\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| name          | string | **yes\\*** |\n| index         | number |    no     |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| identifier    | string | **yes**  |\n| name          | string | **yes**  |\n| brand         | string |    no    |\n| category      | string |    no    |\n| list          | string |    no    |\n| variant       | string |    no    |\n| price         | number |    no    |\n| index         | number |    no    |\n| gaQueryParams | object |    no    |\n\n#### # LocationDirections\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| address       | string | **yes\\*** |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| name          |  string  | **yes**  |\n| brand         |  string  |    no    |\n| category      |  string  |    no    |\n| variant       |  string  |    no    |\n| coupons       | string[] |    no    |\n| price         |  string  |    no    |\n| quantity      |  number  |    no    |\n| index         |  number  |    no    |\n| gaQueryParams |  object  |    no    |\n\n#### # Promotion\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| identifier    | string | **yes**  |\n| name          | string | **yes**  |\n| creative      | string |    no    |\n| slot          | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # RefundProduct\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| quantity      |  number  | **yes**  |\n| price         |  string  |    no    |\n| coupons       | string[] |    no    |\n| gaQueryParams |  object  |    no    |\n\n#### # SearchGeneric\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| term          | string | **yes**  |\n| count         | number |    no    |\n| gaQueryParams | object |    no    |\n\n#### # Screenview\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| url           | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n### Actions\n\n#### # ProductAction\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| list          | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # CheckoutAction\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| step          | number |    no    |\n| option        | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # TransactionAction\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| affiliation   |  string  |    no    |\n| revenue       |  string  |    no    |\n| tax           |  string  |    no    |\n| shippingCost  |  string  |    no    |\n| coupons       | string[] |    no    |\n| gaQueryParams |  object  |    no    |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45',\n    },\n  },\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n- City\n- Country\n- Date\n- Postal Code\n- Region\n- State\n- Time of Day\n- Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n| Property    |  Type  | Required |\n| ----------- | :----: | :------: |\n| propertyId  | string | **yes**  |\n| environment | number | **yes**  |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"d667e719b86b1bc6d8ff825711cf9e31665a8843","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"9.6.2","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"16.13.1","dependencies":{"axios":"0.24.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","reflect-metadata":"^0.1.13","@brandingbrand/fslinker":"12.0.0-alpha.8","@brandingbrand/fsnetwork":"12.0.0-alpha.8","@leanplum/react-native-sdk":"1.3.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"12.0.0-alpha.8","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"react":"*","react-native":"*"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_12.0.0-alpha.8_1680810884362_0.21532391915272697","host":"s3://npm-registry-packages"}},"12.0.0-alpha.9":{"name":"@brandingbrand/fsengage","version":"12.0.0-alpha.9","license":"MIT","_id":"@brandingbrand/fsengage@12.0.0-alpha.9","maintainers":[{"name":"larafawz","email":"lara.fawz@brandingbrand.com"},{"name":"dannybelcher","email":"dannybelcher@att.net"},{"name":"christian-bb","email":"christian.wong@brandingbrand.com"},{"name":"diaw.psd","email":"papa.diaw@brandingbrand.com"},{"name":"oscar.mejia","email":"oscar.mejia@brandingbrand.com"},{"name":"eberghoff","email":"evan.berghoff@brandingbrand.com"},{"name":"astgerbb","email":"andrew.stgermain@brandingbrand.com"},{"name":"bbtravisreadonly","email":"travis@brandingbrand.com"},{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"laineh","email":"lainehallot@gmail.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"danrudolf2","email":"dan.rudolf@brandingbrand.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"}],"dist":{"shasum":"d0692f8bbcfc4e29bf2dd3fb5d5b004b1aa85478","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-12.0.0-alpha.9.tgz","fileCount":111,"integrity":"sha512-5hTQzsCw78oG4398qiqVEZNnxhIQ9h+WncsL5JbmK+lv2porCwAnBFt1wwkDAAnsqCbUaO1pNtFaTswy4+jAXQ==","signatures":[{"sig":"MEUCIFLVblepVO8L6BAeczRR1t+b2Aa6Ro0SJF6GRXPqDoBrAiEA6wIF1aOGljVUTJL5iiEF11jer9x/rM7VtSOMRgb4CeI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":258150,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkNHnIACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrxwA//ZGxyUXniMtD6Lkhu4vcIsz91ye3Oq5QbI6NRfB4QF41a+pk3\r\norYS23hGrhgF/eNe7tw3UiKcJIGuOXLwYgV1S4IC7Kk8LF453aicxInHAAt/\r\nCFZHAT4ko6SqzZIvvqZamOUJTkMOlxBKoCr28+4xzB8ghYK+MOklKzX7okt4\r\nGKqSWvkjj/SFXM9F70SYDI9h6IgfuJfNj+rZOaR8WM8ov7cixipJheWlcI6s\r\nTxJ2+OHKwKOJFMOF6fb8Jp/oGUNHp9hYZMB/2nuUBHa+4ftwdaDhPE1VEpda\r\ncCZ7QMI3aM804H68+++TIO1N912FbC4XSkVrzHVlCCVpwskLKY3HSq8oc68j\r\nQLXgpQQq9VEzQFmi6jJuHTVUfA3C8p2qWxJu2Rle1hbQGtdb1dZ2rX7SfLTP\r\nCxSUpZu2uXaQNaxhMfQPYRrrfLD6ENVnp6qxEcrBqQABe/FDnRZa5dyNw8/l\r\n/AttY1v8DPooGhG76NbvVrKrbhV+P9qmxdJe6G9x/jFmShF2ammp4GBfKLn5\r\nQlyeC0btut7gxjS81FSYp3zu8LbJi8ohGn1wM6eJFNWiVMNbNTMwejuOxphO\r\nocjrkZuHFX67GrwrE5ySCezB8UCbQzYZq5RVsReysg7rIjYY/u0L773C2+NS\r\nrMr3rRpjMuXgcQFnLYUlQFrDVehLAFG5jVo=\r\n=DH8g\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\nwill support Demandware.\n\n- [Analytics](#analytics)\n  - [Analytics Providers](#analytics-providers)\n  - [Analytics Providers Configuration](#analytics-configurations)\n    - [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    - [Leanplum](#LeanplumProviderConfiguration)\n    - [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    - [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  - [Analytics Constructors](#analytics-constructors)\n  - [Analytics Tracking](#tracking-functions)\n    - [Ecommerce Function Signatures](#ecommerce)\n    - [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    - [App Lifecycle Function Signatures](#app-lifecycle)\n    - [Full List of Property Parameters for Tracking](#parameters)\n    - [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n- [CMS](#cms)\n  - [CMS Providers](#cms-providers)\n    - [Core](#core)\n    - [Demandware](#demandware)\n  - [CMS API](#cms-api)\n    - [CMS Configurations](#cms-configurations)\n    - [CMS Constructors](#cms-constructors)\n    - [Functionality](#cms-constructors)\n- [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n**Warning**: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n| Property       |  Type  | Required |\n| -------------- | :----: | :------: |\n| userAgent      | string | **yes**  |\n| osType         | string | **yes**  |\n| osVersion      | string | **yes**  |\n| appName        | string | **yes**  |\n| appId          | string | **yes**  |\n| appVersion     | string | **yes**  |\n| appInstallerId | string |    no    |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| clientId      | string | **yes**  |\n| clientSecret  | string | **yes**  |\n| reportSuiteId | string | **yes**  |\n\n**Note**: This configuration just applies for web environments. For native environment\nconfiguration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n| Property     |  Type  | Required |\n| ------------ | :----: | :------: |\n| trackerId    | string | **yes**  |\n| clientId     | string | **yes**  |\n| trackerName  | string |    no    |\n| cookieDomain | string |    no    |\n\n#### # LeanplumProviderConfiguration\n\n| Property              |  Type  | Required |\n| --------------------- | :----: | :------: |\n| appId                 | string | **yes**  |\n| key                   | string | **yes**  |\n| monetizationEventName | string |    no    |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version,\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID(),\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\n\nconst analytics = new Analytics([google]);\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\nand begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\nyou might want to add a click tracker to your 'Add To Cart' button. It's as simple as adding the\nfollowing code to your success handler (assuming you only want to tracks successful adds):\n\n```javascript\nAnalytics.click.generic('Add to Bag', {\n  identifier: variantId,\n  name: 'PDP',\n});\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\nAnalytics.screenview('ProductDetail', {\n  url: 'www.example.com/products/123',\n});\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| name          | string | **yes\\*** |\n| index         | number |    no     |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| number        | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n#### # ContactEmail\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| to            | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n#### # ImpressionGeneric\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| name          | string | **yes\\*** |\n| index         | number |    no     |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| identifier    | string | **yes**  |\n| name          | string | **yes**  |\n| brand         | string |    no    |\n| category      | string |    no    |\n| list          | string |    no    |\n| variant       | string |    no    |\n| price         | number |    no    |\n| index         | number |    no    |\n| gaQueryParams | object |    no    |\n\n#### # LocationDirections\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| address       | string | **yes\\*** |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| name          |  string  | **yes**  |\n| brand         |  string  |    no    |\n| category      |  string  |    no    |\n| variant       |  string  |    no    |\n| coupons       | string[] |    no    |\n| price         |  string  |    no    |\n| quantity      |  number  |    no    |\n| index         |  number  |    no    |\n| gaQueryParams |  object  |    no    |\n\n#### # Promotion\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| identifier    | string | **yes**  |\n| name          | string | **yes**  |\n| creative      | string |    no    |\n| slot          | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # RefundProduct\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| quantity      |  number  | **yes**  |\n| price         |  string  |    no    |\n| coupons       | string[] |    no    |\n| gaQueryParams |  object  |    no    |\n\n#### # SearchGeneric\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| term          | string | **yes**  |\n| count         | number |    no    |\n| gaQueryParams | object |    no    |\n\n#### # Screenview\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| url           | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n### Actions\n\n#### # ProductAction\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| list          | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # CheckoutAction\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| step          | number |    no    |\n| option        | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # TransactionAction\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| affiliation   |  string  |    no    |\n| revenue       |  string  |    no    |\n| tax           |  string  |    no    |\n| shippingCost  |  string  |    no    |\n| coupons       | string[] |    no    |\n| gaQueryParams |  object  |    no    |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45',\n    },\n  },\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n- City\n- Country\n- Date\n- Postal Code\n- Region\n- State\n- Time of Day\n- Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n| Property    |  Type  | Required |\n| ----------- | :----: | :------: |\n| propertyId  | string | **yes**  |\n| environment | number | **yes**  |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"3b556ac387dad2a302c06885fb051496c91b5455","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"9.6.2","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"16.13.1","dependencies":{"axios":"0.24.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","reflect-metadata":"^0.1.13","@brandingbrand/fslinker":"12.0.0-alpha.9","@brandingbrand/fsnetwork":"12.0.0-alpha.9","@leanplum/react-native-sdk":"1.3.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"12.0.0-alpha.9","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"react":"*","react-native":"*"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_12.0.0-alpha.9_1681160648141_0.6456805605010547","host":"s3://npm-registry-packages"}},"12.0.0-alpha.10":{"name":"@brandingbrand/fsengage","version":"12.0.0-alpha.10","license":"MIT","_id":"@brandingbrand/fsengage@12.0.0-alpha.10","maintainers":[{"name":"larafawz","email":"lara.fawz@brandingbrand.com"},{"name":"dannybelcher","email":"dannybelcher@att.net"},{"name":"christian-bb","email":"christian.wong@brandingbrand.com"},{"name":"diaw.psd","email":"papa.diaw@brandingbrand.com"},{"name":"oscar.mejia","email":"oscar.mejia@brandingbrand.com"},{"name":"eberghoff","email":"evan.berghoff@brandingbrand.com"},{"name":"astgerbb","email":"andrew.stgermain@brandingbrand.com"},{"name":"bbtravisreadonly","email":"travis@brandingbrand.com"},{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"}],"dist":{"shasum":"36e6ce314ca5b820114712cd86cc0fc7e8db6fd6","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-12.0.0-alpha.10.tgz","fileCount":111,"integrity":"sha512-RyKKFskEzNtSbagaqpkrSEBCZssTPpYrMP25jYp3lY9bbeXjRrEZxmEzzRx1+SpQ6CP8/WY0DeHKCoJiFvKE4Q==","signatures":[{"sig":"MEUCIQCsVMOqs1wZuaRGa7EYQ0mdOQ3leNCNPldrlGEemB8XrAIgKaEpRTB6Ur4adxc7OKH8S8d76NiMj+Ydc7IPrO+tHj4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":258154,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkUCYLACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoeWRAAkrdZ3sgr7OUWB07kRSnc0LUR9BvLXkUZ1szaYaJSgNMEap0n\r\nlw5DIEx8qeHNo8gYoIjcYEeXnvC9Oyc1zSpBMZJYVXUyNHMUsVxFD7PqpQDV\r\nfPq5IIAOAoBNDn3AVWn9d4+JOYQHYO5dCgQ7CelqqvW2e4zxHG5oR0lSY4NL\r\n/Kfg274OStmDgIka9rW7eIlutqWennsSYT7hhqtVcAIjH9kIvs7BSgpXE3FP\r\nOjO9zCMdlbEKZsthGk13Gy2cn3TCpiUos6q2fjj8469z0frnhxoIcyzIFoJ5\r\n4Z56Up89NKepeHHiXP5m3yhKO6c+YWkQg7bJ21T4/a/qbGAKKkkGfT6OPWvY\r\nqiNE/Dsa+byiVQCHQ2Qgl1GsAOdciMbYl23BcyR8RZI9sQ7yTHjgzWWuIPsX\r\n+zzOm/9hzEU9p8ApIcIfUnXpDYAMDC3V1z4O0HVqPbWZxm3Ga9s3cXunh7RZ\r\ngSfCe5Um4gNuzwveymkux/3Nm59n82rM/3Gg1MXHu4sPPL5pEYBLBoNYphe8\r\n0lInN1Q1oeFYrLFc5noThNkt07PLOESlQ6eUTwSjJh/S+PuWZvHGoRkygDgX\r\np87t/o/OIFUPDubSeLOK1N7VBU+oa+tBZx2swQPw/VbguHNLgSim7QQ63UZK\r\nrO1ZAAuiEQY/8z8hrNtu/i2LLZr3EjLxLcE=\r\n=3r2B\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./src/index.js","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\nwill support Demandware.\n\n- [Analytics](#analytics)\n  - [Analytics Providers](#analytics-providers)\n  - [Analytics Providers Configuration](#analytics-configurations)\n    - [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    - [Leanplum](#LeanplumProviderConfiguration)\n    - [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    - [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  - [Analytics Constructors](#analytics-constructors)\n  - [Analytics Tracking](#tracking-functions)\n    - [Ecommerce Function Signatures](#ecommerce)\n    - [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    - [App Lifecycle Function Signatures](#app-lifecycle)\n    - [Full List of Property Parameters for Tracking](#parameters)\n    - [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n- [CMS](#cms)\n  - [CMS Providers](#cms-providers)\n    - [Core](#core)\n    - [Demandware](#demandware)\n  - [CMS API](#cms-api)\n    - [CMS Configurations](#cms-configurations)\n    - [CMS Constructors](#cms-constructors)\n    - [Functionality](#cms-constructors)\n- [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n**Warning**: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n| Property       |  Type  | Required |\n| -------------- | :----: | :------: |\n| userAgent      | string | **yes**  |\n| osType         | string | **yes**  |\n| osVersion      | string | **yes**  |\n| appName        | string | **yes**  |\n| appId          | string | **yes**  |\n| appVersion     | string | **yes**  |\n| appInstallerId | string |    no    |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| clientId      | string | **yes**  |\n| clientSecret  | string | **yes**  |\n| reportSuiteId | string | **yes**  |\n\n**Note**: This configuration just applies for web environments. For native environment\nconfiguration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n| Property     |  Type  | Required |\n| ------------ | :----: | :------: |\n| trackerId    | string | **yes**  |\n| clientId     | string | **yes**  |\n| trackerName  | string |    no    |\n| cookieDomain | string |    no    |\n\n#### # LeanplumProviderConfiguration\n\n| Property              |  Type  | Required |\n| --------------------- | :----: | :------: |\n| appId                 | string | **yes**  |\n| key                   | string | **yes**  |\n| monetizationEventName | string |    no    |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version,\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID(),\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\n\nconst analytics = new Analytics([google]);\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\nand begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\nyou might want to add a click tracker to your 'Add To Cart' button. It's as simple as adding the\nfollowing code to your success handler (assuming you only want to tracks successful adds):\n\n```javascript\nAnalytics.click.generic('Add to Bag', {\n  identifier: variantId,\n  name: 'PDP',\n});\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\nAnalytics.screenview('ProductDetail', {\n  url: 'www.example.com/products/123',\n});\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| name          | string | **yes\\*** |\n| index         | number |    no     |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| number        | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n#### # ContactEmail\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| to            | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n#### # ImpressionGeneric\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| name          | string | **yes\\*** |\n| index         | number |    no     |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| identifier    | string | **yes**  |\n| name          | string | **yes**  |\n| brand         | string |    no    |\n| category      | string |    no    |\n| list          | string |    no    |\n| variant       | string |    no    |\n| price         | number |    no    |\n| index         | number |    no    |\n| gaQueryParams | object |    no    |\n\n#### # LocationDirections\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| address       | string | **yes\\*** |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| name          |  string  | **yes**  |\n| brand         |  string  |    no    |\n| category      |  string  |    no    |\n| variant       |  string  |    no    |\n| coupons       | string[] |    no    |\n| price         |  string  |    no    |\n| quantity      |  number  |    no    |\n| index         |  number  |    no    |\n| gaQueryParams |  object  |    no    |\n\n#### # Promotion\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| identifier    | string | **yes**  |\n| name          | string | **yes**  |\n| creative      | string |    no    |\n| slot          | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # RefundProduct\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| quantity      |  number  | **yes**  |\n| price         |  string  |    no    |\n| coupons       | string[] |    no    |\n| gaQueryParams |  object  |    no    |\n\n#### # SearchGeneric\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| term          | string | **yes**  |\n| count         | number |    no    |\n| gaQueryParams | object |    no    |\n\n#### # Screenview\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| url           | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n### Actions\n\n#### # ProductAction\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| list          | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # CheckoutAction\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| step          | number |    no    |\n| option        | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # TransactionAction\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| affiliation   |  string  |    no    |\n| revenue       |  string  |    no    |\n| tax           |  string  |    no    |\n| shippingCost  |  string  |    no    |\n| coupons       | string[] |    no    |\n| gaQueryParams |  object  |    no    |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45',\n    },\n  },\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n- City\n- Country\n- Date\n- Postal Code\n- Region\n- State\n- Time of Day\n- Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n| Property    |  Type  | Required |\n| ----------- | :----: | :------: |\n| propertyId  | string | **yes**  |\n| environment | number | **yes**  |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"294b72274227289752e3449c1eabd60e424be449","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"9.6.2","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"16.13.1","dependencies":{"axios":"0.24.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","reflect-metadata":"^0.1.13","@brandingbrand/fslinker":"12.0.0-alpha.10","@brandingbrand/fsnetwork":"12.0.0-alpha.10","@leanplum/react-native-sdk":"1.3.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"12.0.0-alpha.10","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"react":"*","react-native":"*"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_12.0.0-alpha.10_1682974219236_0.2913812832365079","host":"s3://npm-registry-packages"}},"12.0.0-alpha.11":{"name":"@brandingbrand/fsengage","version":"12.0.0-alpha.11","license":"MIT","_id":"@brandingbrand/fsengage@12.0.0-alpha.11","maintainers":[{"name":"jwitz611","email":"jared@brandingbrand.com"},{"name":"larafawz","email":"lara.fawz@brandingbrand.com"},{"name":"dannybelcher","email":"dannybelcher@att.net"},{"name":"christian-bb","email":"christian.wong@brandingbrand.com"},{"name":"diaw.psd","email":"papa.diaw@brandingbrand.com"},{"name":"oscar.mejia","email":"oscar.mejia@brandingbrand.com"},{"name":"eberghoff","email":"evan.berghoff@brandingbrand.com"},{"name":"astgerbb","email":"andrew.stgermain@brandingbrand.com"},{"name":"bbtravisreadonly","email":"travis@brandingbrand.com"},{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"}],"dist":{"shasum":"ce79f8533e03c65c6ae7835e49c5e102a696f055","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-12.0.0-alpha.11.tgz","fileCount":111,"integrity":"sha512-C3NvpU8KVK7Su66F+OfbQnUZQxaL+0TkZTLEomRezGAP8kM+fajNk9yxe8061Hxb88h/0SLaBmiGiemeMo+vYA==","signatures":[{"sig":"MEQCIFDbmE1gwNWfzFd/iB6o75G/TU0OdtlQsh+BJc3JmU0dAiBJ/kBwCvkRZtidzrmdncrhcltIrEXW8TdIuICPMTftOg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":258154},"main":"./src/index.js","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\nwill support Demandware.\n\n- [Analytics](#analytics)\n  - [Analytics Providers](#analytics-providers)\n  - [Analytics Providers Configuration](#analytics-configurations)\n    - [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    - [Leanplum](#LeanplumProviderConfiguration)\n    - [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    - [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  - [Analytics Constructors](#analytics-constructors)\n  - [Analytics Tracking](#tracking-functions)\n    - [Ecommerce Function Signatures](#ecommerce)\n    - [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    - [App Lifecycle Function Signatures](#app-lifecycle)\n    - [Full List of Property Parameters for Tracking](#parameters)\n    - [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n- [CMS](#cms)\n  - [CMS Providers](#cms-providers)\n    - [Core](#core)\n    - [Demandware](#demandware)\n  - [CMS API](#cms-api)\n    - [CMS Configurations](#cms-configurations)\n    - [CMS Constructors](#cms-constructors)\n    - [Functionality](#cms-constructors)\n- [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n**Warning**: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n| Property       |  Type  | Required |\n| -------------- | :----: | :------: |\n| userAgent      | string | **yes**  |\n| osType         | string | **yes**  |\n| osVersion      | string | **yes**  |\n| appName        | string | **yes**  |\n| appId          | string | **yes**  |\n| appVersion     | string | **yes**  |\n| appInstallerId | string |    no    |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| clientId      | string | **yes**  |\n| clientSecret  | string | **yes**  |\n| reportSuiteId | string | **yes**  |\n\n**Note**: This configuration just applies for web environments. For native environment\nconfiguration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n| Property     |  Type  | Required |\n| ------------ | :----: | :------: |\n| trackerId    | string | **yes**  |\n| clientId     | string | **yes**  |\n| trackerName  | string |    no    |\n| cookieDomain | string |    no    |\n\n#### # LeanplumProviderConfiguration\n\n| Property              |  Type  | Required |\n| --------------------- | :----: | :------: |\n| appId                 | string | **yes**  |\n| key                   | string | **yes**  |\n| monetizationEventName | string |    no    |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version,\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID(),\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\n\nconst analytics = new Analytics([google]);\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\nand begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\nyou might want to add a click tracker to your 'Add To Cart' button. It's as simple as adding the\nfollowing code to your success handler (assuming you only want to tracks successful adds):\n\n```javascript\nAnalytics.click.generic('Add to Bag', {\n  identifier: variantId,\n  name: 'PDP',\n});\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\nAnalytics.screenview('ProductDetail', {\n  url: 'www.example.com/products/123',\n});\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| name          | string | **yes\\*** |\n| index         | number |    no     |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| number        | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n#### # ContactEmail\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| to            | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n#### # ImpressionGeneric\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| name          | string | **yes\\*** |\n| index         | number |    no     |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| identifier    | string | **yes**  |\n| name          | string | **yes**  |\n| brand         | string |    no    |\n| category      | string |    no    |\n| list          | string |    no    |\n| variant       | string |    no    |\n| price         | number |    no    |\n| index         | number |    no    |\n| gaQueryParams | object |    no    |\n\n#### # LocationDirections\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| address       | string | **yes\\*** |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| name          |  string  | **yes**  |\n| brand         |  string  |    no    |\n| category      |  string  |    no    |\n| variant       |  string  |    no    |\n| coupons       | string[] |    no    |\n| price         |  string  |    no    |\n| quantity      |  number  |    no    |\n| index         |  number  |    no    |\n| gaQueryParams |  object  |    no    |\n\n#### # Promotion\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| identifier    | string | **yes**  |\n| name          | string | **yes**  |\n| creative      | string |    no    |\n| slot          | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # RefundProduct\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| quantity      |  number  | **yes**  |\n| price         |  string  |    no    |\n| coupons       | string[] |    no    |\n| gaQueryParams |  object  |    no    |\n\n#### # SearchGeneric\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| term          | string | **yes**  |\n| count         | number |    no    |\n| gaQueryParams | object |    no    |\n\n#### # Screenview\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| url           | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n### Actions\n\n#### # ProductAction\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| list          | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # CheckoutAction\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| step          | number |    no    |\n| option        | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # TransactionAction\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| affiliation   |  string  |    no    |\n| revenue       |  string  |    no    |\n| tax           |  string  |    no    |\n| shippingCost  |  string  |    no    |\n| coupons       | string[] |    no    |\n| gaQueryParams |  object  |    no    |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45',\n    },\n  },\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n- City\n- Country\n- Date\n- Postal Code\n- Region\n- State\n- Time of Day\n- Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n| Property    |  Type  | Required |\n| ----------- | :----: | :------: |\n| propertyId  | string | **yes**  |\n| environment | number | **yes**  |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"6691c469099e8b71d4ab37ae0464aab3db421f95","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"9.6.2","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"16.13.1","dependencies":{"axios":"0.24.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","reflect-metadata":"^0.1.13","@brandingbrand/fslinker":"12.0.0-alpha.11","@brandingbrand/fsnetwork":"12.0.0-alpha.11","@leanplum/react-native-sdk":"1.3.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"12.0.0-alpha.11","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"react":"*","react-native":"*"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_12.0.0-alpha.11_1685481701540_0.017678819947236413","host":"s3://npm-registry-packages"}},"11.87.0":{"name":"@brandingbrand/fsengage","version":"11.87.0","license":"MIT","_id":"@brandingbrand/fsengage@11.87.0","maintainers":[{"name":"jwitz611","email":"jared@brandingbrand.com"},{"name":"larafawz","email":"lara.fawz@brandingbrand.com"},{"name":"dannybelcher","email":"dannybelcher@att.net"},{"name":"christian-bb","email":"christian.wong@brandingbrand.com"},{"name":"diaw.psd","email":"papa.diaw@brandingbrand.com"},{"name":"oscar.mejia","email":"oscar.mejia@brandingbrand.com"},{"name":"eberghoff","email":"evan.berghoff@brandingbrand.com"},{"name":"astgerbb","email":"andrew.stgermain@brandingbrand.com"},{"name":"bbtravisreadonly","email":"travis@brandingbrand.com"},{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"}],"dist":{"shasum":"f1f5ec878b503c1f1583f3292088e7b9bbe6d99b","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.87.0.tgz","fileCount":111,"integrity":"sha512-FKuVF0wWxI76Zr2UOZK//C0tJeUfxD6OqjACMwSBz4ddanFysARzqHycM+qYF+1rn3n+S6nfwaBdihlNxbc2Nw==","signatures":[{"sig":"MEYCIQDvuU1iJ0iyMJ6U3h7nRby0LWEjTg+u1zF2z4rP4tE8HAIhAOgXOgsaLm9jPSM1XUCc+xHTZ2N1Xk7aTuZ+7sGWujCM","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":258682},"main":"./src/index.js","gitHead":"dfae198a31b48660476d46dafb4b39d0848eb7ef","typings":"./src/index.d.ts","_npmUser":{"name":"winescout","email":"matt.clark@brandingbrand.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.3","dependencies":{"axios":"~0.27.2","react":"^16.14.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.5","reflect-metadata":"^0.1.13","@brandingbrand/fslinker":"11.87.0","@brandingbrand/fsnetwork":"11.87.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.87.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.87.0_1685548224245_0.5012375913565312","host":"s3://npm-registry-packages"}},"12.0.0-alpha.12":{"name":"@brandingbrand/fsengage","version":"12.0.0-alpha.12","license":"MIT","_id":"@brandingbrand/fsengage@12.0.0-alpha.12","maintainers":[{"name":"jwitz611","email":"jared@brandingbrand.com"},{"name":"larafawz","email":"lara.fawz@brandingbrand.com"},{"name":"dannybelcher","email":"dannybelcher@att.net"},{"name":"christian-bb","email":"christian.wong@brandingbrand.com"},{"name":"diaw.psd","email":"papa.diaw@brandingbrand.com"},{"name":"oscar.mejia","email":"oscar.mejia@brandingbrand.com"},{"name":"eberghoff","email":"evan.berghoff@brandingbrand.com"},{"name":"astgerbb","email":"andrew.stgermain@brandingbrand.com"},{"name":"bbtravisreadonly","email":"travis@brandingbrand.com"},{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"}],"dist":{"shasum":"68205f7891a6151638a58909ac28605ee5dc1359","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-12.0.0-alpha.12.tgz","fileCount":111,"integrity":"sha512-xBrvqu9i62dmUbYKmDrcROWOQVdyuZok/ogJcIp2640Iz4zI8WVAa5gcbhzpjiBRZJzPi0iZ7sc+XNGGB6PWGw==","signatures":[{"sig":"MEQCIAXbC8ZRrRmbQgF8yU8yM1NrmDKZLUpKj3fONK+CaQPPAiANEPDca8Ox3L0qFCoPRINJlwcbtKbHCVt3ZaBmm64+Ig==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":258154},"main":"./src/index.js","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\nwill support Demandware.\n\n- [Analytics](#analytics)\n  - [Analytics Providers](#analytics-providers)\n  - [Analytics Providers Configuration](#analytics-configurations)\n    - [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    - [Leanplum](#LeanplumProviderConfiguration)\n    - [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    - [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  - [Analytics Constructors](#analytics-constructors)\n  - [Analytics Tracking](#tracking-functions)\n    - [Ecommerce Function Signatures](#ecommerce)\n    - [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    - [App Lifecycle Function Signatures](#app-lifecycle)\n    - [Full List of Property Parameters for Tracking](#parameters)\n    - [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n- [CMS](#cms)\n  - [CMS Providers](#cms-providers)\n    - [Core](#core)\n    - [Demandware](#demandware)\n  - [CMS API](#cms-api)\n    - [CMS Configurations](#cms-configurations)\n    - [CMS Constructors](#cms-constructors)\n    - [Functionality](#cms-constructors)\n- [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n**Warning**: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n| Property       |  Type  | Required |\n| -------------- | :----: | :------: |\n| userAgent      | string | **yes**  |\n| osType         | string | **yes**  |\n| osVersion      | string | **yes**  |\n| appName        | string | **yes**  |\n| appId          | string | **yes**  |\n| appVersion     | string | **yes**  |\n| appInstallerId | string |    no    |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| clientId      | string | **yes**  |\n| clientSecret  | string | **yes**  |\n| reportSuiteId | string | **yes**  |\n\n**Note**: This configuration just applies for web environments. For native environment\nconfiguration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n| Property     |  Type  | Required |\n| ------------ | :----: | :------: |\n| trackerId    | string | **yes**  |\n| clientId     | string | **yes**  |\n| trackerName  | string |    no    |\n| cookieDomain | string |    no    |\n\n#### # LeanplumProviderConfiguration\n\n| Property              |  Type  | Required |\n| --------------------- | :----: | :------: |\n| appId                 | string | **yes**  |\n| key                   | string | **yes**  |\n| monetizationEventName | string |    no    |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version,\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID(),\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\n\nconst analytics = new Analytics([google]);\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\nand begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\nyou might want to add a click tracker to your 'Add To Cart' button. It's as simple as adding the\nfollowing code to your success handler (assuming you only want to tracks successful adds):\n\n```javascript\nAnalytics.click.generic('Add to Bag', {\n  identifier: variantId,\n  name: 'PDP',\n});\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\nAnalytics.screenview('ProductDetail', {\n  url: 'www.example.com/products/123',\n});\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| name          | string | **yes\\*** |\n| index         | number |    no     |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| number        | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n#### # ContactEmail\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| to            | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n#### # ImpressionGeneric\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| name          | string | **yes\\*** |\n| index         | number |    no     |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| identifier    | string | **yes**  |\n| name          | string | **yes**  |\n| brand         | string |    no    |\n| category      | string |    no    |\n| list          | string |    no    |\n| variant       | string |    no    |\n| price         | number |    no    |\n| index         | number |    no    |\n| gaQueryParams | object |    no    |\n\n#### # LocationDirections\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| address       | string | **yes\\*** |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| name          |  string  | **yes**  |\n| brand         |  string  |    no    |\n| category      |  string  |    no    |\n| variant       |  string  |    no    |\n| coupons       | string[] |    no    |\n| price         |  string  |    no    |\n| quantity      |  number  |    no    |\n| index         |  number  |    no    |\n| gaQueryParams |  object  |    no    |\n\n#### # Promotion\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| identifier    | string | **yes**  |\n| name          | string | **yes**  |\n| creative      | string |    no    |\n| slot          | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # RefundProduct\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| quantity      |  number  | **yes**  |\n| price         |  string  |    no    |\n| coupons       | string[] |    no    |\n| gaQueryParams |  object  |    no    |\n\n#### # SearchGeneric\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| term          | string | **yes**  |\n| count         | number |    no    |\n| gaQueryParams | object |    no    |\n\n#### # Screenview\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| url           | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n### Actions\n\n#### # ProductAction\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| list          | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # CheckoutAction\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| step          | number |    no    |\n| option        | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # TransactionAction\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| affiliation   |  string  |    no    |\n| revenue       |  string  |    no    |\n| tax           |  string  |    no    |\n| shippingCost  |  string  |    no    |\n| coupons       | string[] |    no    |\n| gaQueryParams |  object  |    no    |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45',\n    },\n  },\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n- City\n- Country\n- Date\n- Postal Code\n- Region\n- State\n- Time of Day\n- Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n| Property    |  Type  | Required |\n| ----------- | :----: | :------: |\n| propertyId  | string | **yes**  |\n| environment | number | **yes**  |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"2f7fbdeed69cefdb10004315a83de1811d500b11","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"9.6.2","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"16.13.1","dependencies":{"axios":"0.24.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","reflect-metadata":"^0.1.13","@brandingbrand/fslinker":"12.0.0-alpha.12","@brandingbrand/fsnetwork":"12.0.0-alpha.12","@leanplum/react-native-sdk":"1.3.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"12.0.0-alpha.12","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"react":"*","react-native":"*"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_12.0.0-alpha.12_1685636961906_0.8482011232307913","host":"s3://npm-registry-packages"}},"12.0.0-alpha.13":{"name":"@brandingbrand/fsengage","version":"12.0.0-alpha.13","license":"MIT","_id":"@brandingbrand/fsengage@12.0.0-alpha.13","maintainers":[{"name":"jwitz611","email":"jared@brandingbrand.com"},{"name":"larafawz","email":"lara.fawz@brandingbrand.com"},{"name":"dannybelcher","email":"dannybelcher@att.net"},{"name":"christian-bb","email":"christian.wong@brandingbrand.com"},{"name":"diaw.psd","email":"papa.diaw@brandingbrand.com"},{"name":"oscar.mejia","email":"oscar.mejia@brandingbrand.com"},{"name":"eberghoff","email":"evan.berghoff@brandingbrand.com"},{"name":"astgerbb","email":"andrew.stgermain@brandingbrand.com"},{"name":"bbtravisreadonly","email":"travis@brandingbrand.com"},{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"}],"dist":{"shasum":"c9b732e2db3c8fa7cdaac48a6e6f87537d654568","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-12.0.0-alpha.13.tgz","fileCount":111,"integrity":"sha512-5PbM6jTsWx1eqGbYJk3tkJH8CEc7z5HRjEKyfRXgqyqzbbrgdTgq/daQZTODl2bQpQNK1eUAU+lFK+aH19O+gA==","signatures":[{"sig":"MEUCIQCoRwuoHIF3wn4pcjUvAXgbYTb0FKIXRxJar2GjE8sV7gIgapu2eb8RBevnBvXHvr/mM6am/YF58yeUyElC8tCmaJY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":258154},"main":"./src/index.js","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\nwill support Demandware.\n\n- [Analytics](#analytics)\n  - [Analytics Providers](#analytics-providers)\n  - [Analytics Providers Configuration](#analytics-configurations)\n    - [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    - [Leanplum](#LeanplumProviderConfiguration)\n    - [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    - [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  - [Analytics Constructors](#analytics-constructors)\n  - [Analytics Tracking](#tracking-functions)\n    - [Ecommerce Function Signatures](#ecommerce)\n    - [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    - [App Lifecycle Function Signatures](#app-lifecycle)\n    - [Full List of Property Parameters for Tracking](#parameters)\n    - [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n- [CMS](#cms)\n  - [CMS Providers](#cms-providers)\n    - [Core](#core)\n    - [Demandware](#demandware)\n  - [CMS API](#cms-api)\n    - [CMS Configurations](#cms-configurations)\n    - [CMS Constructors](#cms-constructors)\n    - [Functionality](#cms-constructors)\n- [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n**Warning**: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n| Property       |  Type  | Required |\n| -------------- | :----: | :------: |\n| userAgent      | string | **yes**  |\n| osType         | string | **yes**  |\n| osVersion      | string | **yes**  |\n| appName        | string | **yes**  |\n| appId          | string | **yes**  |\n| appVersion     | string | **yes**  |\n| appInstallerId | string |    no    |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| clientId      | string | **yes**  |\n| clientSecret  | string | **yes**  |\n| reportSuiteId | string | **yes**  |\n\n**Note**: This configuration just applies for web environments. For native environment\nconfiguration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n| Property     |  Type  | Required |\n| ------------ | :----: | :------: |\n| trackerId    | string | **yes**  |\n| clientId     | string | **yes**  |\n| trackerName  | string |    no    |\n| cookieDomain | string |    no    |\n\n#### # LeanplumProviderConfiguration\n\n| Property              |  Type  | Required |\n| --------------------- | :----: | :------: |\n| appId                 | string | **yes**  |\n| key                   | string | **yes**  |\n| monetizationEventName | string |    no    |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version,\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID(),\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\n\nconst analytics = new Analytics([google]);\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\nand begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\nyou might want to add a click tracker to your 'Add To Cart' button. It's as simple as adding the\nfollowing code to your success handler (assuming you only want to tracks successful adds):\n\n```javascript\nAnalytics.click.generic('Add to Bag', {\n  identifier: variantId,\n  name: 'PDP',\n});\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\nAnalytics.screenview('ProductDetail', {\n  url: 'www.example.com/products/123',\n});\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| name          | string | **yes\\*** |\n| index         | number |    no     |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| number        | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n#### # ContactEmail\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| to            | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n#### # ImpressionGeneric\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| name          | string | **yes\\*** |\n| index         | number |    no     |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| identifier    | string | **yes**  |\n| name          | string | **yes**  |\n| brand         | string |    no    |\n| category      | string |    no    |\n| list          | string |    no    |\n| variant       | string |    no    |\n| price         | number |    no    |\n| index         | number |    no    |\n| gaQueryParams | object |    no    |\n\n#### # LocationDirections\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| address       | string | **yes\\*** |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| name          |  string  | **yes**  |\n| brand         |  string  |    no    |\n| category      |  string  |    no    |\n| variant       |  string  |    no    |\n| coupons       | string[] |    no    |\n| price         |  string  |    no    |\n| quantity      |  number  |    no    |\n| index         |  number  |    no    |\n| gaQueryParams |  object  |    no    |\n\n#### # Promotion\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| identifier    | string | **yes**  |\n| name          | string | **yes**  |\n| creative      | string |    no    |\n| slot          | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # RefundProduct\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| quantity      |  number  | **yes**  |\n| price         |  string  |    no    |\n| coupons       | string[] |    no    |\n| gaQueryParams |  object  |    no    |\n\n#### # SearchGeneric\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| term          | string | **yes**  |\n| count         | number |    no    |\n| gaQueryParams | object |    no    |\n\n#### # Screenview\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| url           | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n### Actions\n\n#### # ProductAction\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| list          | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # CheckoutAction\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| step          | number |    no    |\n| option        | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # TransactionAction\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| affiliation   |  string  |    no    |\n| revenue       |  string  |    no    |\n| tax           |  string  |    no    |\n| shippingCost  |  string  |    no    |\n| coupons       | string[] |    no    |\n| gaQueryParams |  object  |    no    |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45',\n    },\n  },\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n- City\n- Country\n- Date\n- Postal Code\n- Region\n- State\n- Time of Day\n- Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n| Property    |  Type  | Required |\n| ----------- | :----: | :------: |\n| propertyId  | string | **yes**  |\n| environment | number | **yes**  |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"1ceb45518eea13e5f797aa3069e8f565b4f2080d","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"9.6.2","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"16.13.1","dependencies":{"axios":"0.24.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","reflect-metadata":"^0.1.13","@brandingbrand/fslinker":"12.0.0-alpha.13","@brandingbrand/fsnetwork":"12.0.0-alpha.13","@leanplum/react-native-sdk":"1.3.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"12.0.0-alpha.13","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"react":"*","react-native":"*"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_12.0.0-alpha.13_1686086906572_0.3980167254134508","host":"s3://npm-registry-packages"}},"12.0.0-alpha.14":{"name":"@brandingbrand/fsengage","version":"12.0.0-alpha.14","license":"MIT","_id":"@brandingbrand/fsengage@12.0.0-alpha.14","maintainers":[{"name":"jwitz611","email":"jared@brandingbrand.com"},{"name":"larafawz","email":"lara.fawz@brandingbrand.com"},{"name":"dannybelcher","email":"dannybelcher@att.net"},{"name":"christian-bb","email":"christian.wong@brandingbrand.com"},{"name":"diaw.psd","email":"papa.diaw@brandingbrand.com"},{"name":"oscar.mejia","email":"oscar.mejia@brandingbrand.com"},{"name":"eberghoff","email":"evan.berghoff@brandingbrand.com"},{"name":"astgerbb","email":"andrew.stgermain@brandingbrand.com"},{"name":"bbtravisreadonly","email":"travis@brandingbrand.com"},{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"}],"dist":{"shasum":"1f31c58599dc28b91a434167d5ff4461acba92ee","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-12.0.0-alpha.14.tgz","fileCount":111,"integrity":"sha512-/ZuQgIB48BPbWVOd+H1rU8mVcWUm5byCWAtn/s3fP5Xx4r3MHKByyaVnbupM9lRW/b4HQlHZ6S+aLLFHHY4yXA==","signatures":[{"sig":"MEUCIQDjrQXpnG/OgDb75pqquDNL+SuWbh3SaEGlRZp/SRxhCQIgbFDhmQQ/i+F63lIzcrsghwyGwyoGrq0L+Zg8M7AtFLc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":258154},"main":"./src/index.js","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\nwill support Demandware.\n\n- [Analytics](#analytics)\n  - [Analytics Providers](#analytics-providers)\n  - [Analytics Providers Configuration](#analytics-configurations)\n    - [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    - [Leanplum](#LeanplumProviderConfiguration)\n    - [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    - [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  - [Analytics Constructors](#analytics-constructors)\n  - [Analytics Tracking](#tracking-functions)\n    - [Ecommerce Function Signatures](#ecommerce)\n    - [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    - [App Lifecycle Function Signatures](#app-lifecycle)\n    - [Full List of Property Parameters for Tracking](#parameters)\n    - [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n- [CMS](#cms)\n  - [CMS Providers](#cms-providers)\n    - [Core](#core)\n    - [Demandware](#demandware)\n  - [CMS API](#cms-api)\n    - [CMS Configurations](#cms-configurations)\n    - [CMS Constructors](#cms-constructors)\n    - [Functionality](#cms-constructors)\n- [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n**Warning**: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n| Property       |  Type  | Required |\n| -------------- | :----: | :------: |\n| userAgent      | string | **yes**  |\n| osType         | string | **yes**  |\n| osVersion      | string | **yes**  |\n| appName        | string | **yes**  |\n| appId          | string | **yes**  |\n| appVersion     | string | **yes**  |\n| appInstallerId | string |    no    |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| clientId      | string | **yes**  |\n| clientSecret  | string | **yes**  |\n| reportSuiteId | string | **yes**  |\n\n**Note**: This configuration just applies for web environments. For native environment\nconfiguration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n| Property     |  Type  | Required |\n| ------------ | :----: | :------: |\n| trackerId    | string | **yes**  |\n| clientId     | string | **yes**  |\n| trackerName  | string |    no    |\n| cookieDomain | string |    no    |\n\n#### # LeanplumProviderConfiguration\n\n| Property              |  Type  | Required |\n| --------------------- | :----: | :------: |\n| appId                 | string | **yes**  |\n| key                   | string | **yes**  |\n| monetizationEventName | string |    no    |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version,\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID(),\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\n\nconst analytics = new Analytics([google]);\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\nand begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\nyou might want to add a click tracker to your 'Add To Cart' button. It's as simple as adding the\nfollowing code to your success handler (assuming you only want to tracks successful adds):\n\n```javascript\nAnalytics.click.generic('Add to Bag', {\n  identifier: variantId,\n  name: 'PDP',\n});\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\nAnalytics.screenview('ProductDetail', {\n  url: 'www.example.com/products/123',\n});\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| name          | string | **yes\\*** |\n| index         | number |    no     |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| number        | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n#### # ContactEmail\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| to            | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n#### # ImpressionGeneric\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| name          | string | **yes\\*** |\n| index         | number |    no     |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| identifier    | string | **yes**  |\n| name          | string | **yes**  |\n| brand         | string |    no    |\n| category      | string |    no    |\n| list          | string |    no    |\n| variant       | string |    no    |\n| price         | number |    no    |\n| index         | number |    no    |\n| gaQueryParams | object |    no    |\n\n#### # LocationDirections\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| address       | string | **yes\\*** |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| name          |  string  | **yes**  |\n| brand         |  string  |    no    |\n| category      |  string  |    no    |\n| variant       |  string  |    no    |\n| coupons       | string[] |    no    |\n| price         |  string  |    no    |\n| quantity      |  number  |    no    |\n| index         |  number  |    no    |\n| gaQueryParams |  object  |    no    |\n\n#### # Promotion\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| identifier    | string | **yes**  |\n| name          | string | **yes**  |\n| creative      | string |    no    |\n| slot          | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # RefundProduct\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| quantity      |  number  | **yes**  |\n| price         |  string  |    no    |\n| coupons       | string[] |    no    |\n| gaQueryParams |  object  |    no    |\n\n#### # SearchGeneric\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| term          | string | **yes**  |\n| count         | number |    no    |\n| gaQueryParams | object |    no    |\n\n#### # Screenview\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| url           | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n### Actions\n\n#### # ProductAction\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| list          | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # CheckoutAction\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| step          | number |    no    |\n| option        | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # TransactionAction\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| affiliation   |  string  |    no    |\n| revenue       |  string  |    no    |\n| tax           |  string  |    no    |\n| shippingCost  |  string  |    no    |\n| coupons       | string[] |    no    |\n| gaQueryParams |  object  |    no    |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45',\n    },\n  },\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n- City\n- Country\n- Date\n- Postal Code\n- Region\n- State\n- Time of Day\n- Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n| Property    |  Type  | Required |\n| ----------- | :----: | :------: |\n| propertyId  | string | **yes**  |\n| environment | number | **yes**  |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"1ceb45518eea13e5f797aa3069e8f565b4f2080d","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"9.6.2","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"16.13.1","dependencies":{"axios":"0.24.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","reflect-metadata":"^0.1.13","@brandingbrand/fslinker":"12.0.0-alpha.14","@brandingbrand/fsnetwork":"12.0.0-alpha.14","@leanplum/react-native-sdk":"1.3.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"12.0.0-alpha.14","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"react":"*","react-native":"*"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_12.0.0-alpha.14_1686090894116_0.11383621345127848","host":"s3://npm-registry-packages"}},"12.0.0-alpha.15":{"name":"@brandingbrand/fsengage","version":"12.0.0-alpha.15","license":"MIT","_id":"@brandingbrand/fsengage@12.0.0-alpha.15","maintainers":[{"name":"jwitz611","email":"jared@brandingbrand.com"},{"name":"larafawz","email":"lara.fawz@brandingbrand.com"},{"name":"dannybelcher","email":"dannybelcher@att.net"},{"name":"christian-bb","email":"christian.wong@brandingbrand.com"},{"name":"diaw.psd","email":"papa.diaw@brandingbrand.com"},{"name":"oscar.mejia","email":"oscar.mejia@brandingbrand.com"},{"name":"eberghoff","email":"evan.berghoff@brandingbrand.com"},{"name":"astgerbb","email":"andrew.stgermain@brandingbrand.com"},{"name":"bbtravisreadonly","email":"travis@brandingbrand.com"},{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"}],"dist":{"shasum":"40f033d2b3aad91ae3f923c147fd7e0d58b4e4d5","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-12.0.0-alpha.15.tgz","fileCount":111,"integrity":"sha512-I8EEPByEsqkFlnxnfqFNHdTPcI6rf6oZdYSovs0rejHTyTtkW+8ZJ9Bml8hNd1crj0urK3GGK67NWrti0cLLBA==","signatures":[{"sig":"MEUCIQCDfHBeRRDGGLxlOh9jfFe8ShTmVhPmGHLkVeeuFcRXdQIgYI4G5iu1fza0O6OI+zY9N79XGtEt2WFIaOIavoDcywE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":258154},"main":"./src/index.js","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\nwill support Demandware.\n\n- [Analytics](#analytics)\n  - [Analytics Providers](#analytics-providers)\n  - [Analytics Providers Configuration](#analytics-configurations)\n    - [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    - [Leanplum](#LeanplumProviderConfiguration)\n    - [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    - [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  - [Analytics Constructors](#analytics-constructors)\n  - [Analytics Tracking](#tracking-functions)\n    - [Ecommerce Function Signatures](#ecommerce)\n    - [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    - [App Lifecycle Function Signatures](#app-lifecycle)\n    - [Full List of Property Parameters for Tracking](#parameters)\n    - [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n- [CMS](#cms)\n  - [CMS Providers](#cms-providers)\n    - [Core](#core)\n    - [Demandware](#demandware)\n  - [CMS API](#cms-api)\n    - [CMS Configurations](#cms-configurations)\n    - [CMS Constructors](#cms-constructors)\n    - [Functionality](#cms-constructors)\n- [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n**Warning**: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n| Property       |  Type  | Required |\n| -------------- | :----: | :------: |\n| userAgent      | string | **yes**  |\n| osType         | string | **yes**  |\n| osVersion      | string | **yes**  |\n| appName        | string | **yes**  |\n| appId          | string | **yes**  |\n| appVersion     | string | **yes**  |\n| appInstallerId | string |    no    |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| clientId      | string | **yes**  |\n| clientSecret  | string | **yes**  |\n| reportSuiteId | string | **yes**  |\n\n**Note**: This configuration just applies for web environments. For native environment\nconfiguration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n| Property     |  Type  | Required |\n| ------------ | :----: | :------: |\n| trackerId    | string | **yes**  |\n| clientId     | string | **yes**  |\n| trackerName  | string |    no    |\n| cookieDomain | string |    no    |\n\n#### # LeanplumProviderConfiguration\n\n| Property              |  Type  | Required |\n| --------------------- | :----: | :------: |\n| appId                 | string | **yes**  |\n| key                   | string | **yes**  |\n| monetizationEventName | string |    no    |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version,\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID(),\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\n\nconst analytics = new Analytics([google]);\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\nand begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\nyou might want to add a click tracker to your 'Add To Cart' button. It's as simple as adding the\nfollowing code to your success handler (assuming you only want to tracks successful adds):\n\n```javascript\nAnalytics.click.generic('Add to Bag', {\n  identifier: variantId,\n  name: 'PDP',\n});\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\nAnalytics.screenview('ProductDetail', {\n  url: 'www.example.com/products/123',\n});\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| name          | string | **yes\\*** |\n| index         | number |    no     |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| number        | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n#### # ContactEmail\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| to            | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n#### # ImpressionGeneric\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| name          | string | **yes\\*** |\n| index         | number |    no     |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| identifier    | string | **yes**  |\n| name          | string | **yes**  |\n| brand         | string |    no    |\n| category      | string |    no    |\n| list          | string |    no    |\n| variant       | string |    no    |\n| price         | number |    no    |\n| index         | number |    no    |\n| gaQueryParams | object |    no    |\n\n#### # LocationDirections\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| address       | string | **yes\\*** |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| name          |  string  | **yes**  |\n| brand         |  string  |    no    |\n| category      |  string  |    no    |\n| variant       |  string  |    no    |\n| coupons       | string[] |    no    |\n| price         |  string  |    no    |\n| quantity      |  number  |    no    |\n| index         |  number  |    no    |\n| gaQueryParams |  object  |    no    |\n\n#### # Promotion\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| identifier    | string | **yes**  |\n| name          | string | **yes**  |\n| creative      | string |    no    |\n| slot          | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # RefundProduct\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| quantity      |  number  | **yes**  |\n| price         |  string  |    no    |\n| coupons       | string[] |    no    |\n| gaQueryParams |  object  |    no    |\n\n#### # SearchGeneric\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| term          | string | **yes**  |\n| count         | number |    no    |\n| gaQueryParams | object |    no    |\n\n#### # Screenview\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| url           | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n### Actions\n\n#### # ProductAction\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| list          | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # CheckoutAction\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| step          | number |    no    |\n| option        | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # TransactionAction\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| affiliation   |  string  |    no    |\n| revenue       |  string  |    no    |\n| tax           |  string  |    no    |\n| shippingCost  |  string  |    no    |\n| coupons       | string[] |    no    |\n| gaQueryParams |  object  |    no    |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45',\n    },\n  },\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n- City\n- Country\n- Date\n- Postal Code\n- Region\n- State\n- Time of Day\n- Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n| Property    |  Type  | Required |\n| ----------- | :----: | :------: |\n| propertyId  | string | **yes**  |\n| environment | number | **yes**  |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"f491fd7879cecbdd54be341c75e515843771b8a9","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"9.6.2","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"16.13.1","dependencies":{"axios":"0.24.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","reflect-metadata":"^0.1.13","@brandingbrand/fslinker":"12.0.0-alpha.15","@brandingbrand/fsnetwork":"12.0.0-alpha.15","@leanplum/react-native-sdk":"1.3.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"12.0.0-alpha.15","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"react":"*","react-native":"*"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_12.0.0-alpha.15_1686151947589_0.6435005501849471","host":"s3://npm-registry-packages"}},"11.87.1":{"name":"@brandingbrand/fsengage","version":"11.87.1","license":"MIT","_id":"@brandingbrand/fsengage@11.87.1","maintainers":[{"name":"jwitz611","email":"jared@brandingbrand.com"},{"name":"larafawz","email":"lara.fawz@brandingbrand.com"},{"name":"dannybelcher","email":"dannybelcher@att.net"},{"name":"christian-bb","email":"christian.wong@brandingbrand.com"},{"name":"diaw.psd","email":"papa.diaw@brandingbrand.com"},{"name":"oscar.mejia","email":"oscar.mejia@brandingbrand.com"},{"name":"eberghoff","email":"evan.berghoff@brandingbrand.com"},{"name":"astgerbb","email":"andrew.stgermain@brandingbrand.com"},{"name":"bbtravisreadonly","email":"travis@brandingbrand.com"},{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"}],"dist":{"shasum":"a773bd9fb9fb3294a5329e900ee397476af9453c","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.87.1.tgz","fileCount":111,"integrity":"sha512-/e8Mw/6xagu8a3RHVmEjCcivqDCEp1QSyG2uY+J13IzOeZIEDflrOWgzqH1AfKdmJHyzNSZD7WIeg9DN6LoGyg==","signatures":[{"sig":"MEYCIQCgp15j6j5FE7HsYrj+qO8Skv0Z+Nl/qUXxFs4ZPVbHCgIhAOHcUrt6W5/mMyBErtS7cVAx7rC2/5myngeOAJ9yzRm3","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":258782},"main":"./src/index.js","gitHead":"7c845cfc5f982083c22c40eeb04b1438d4c1579e","typings":"./src/index.d.ts","_npmUser":{"name":"winescout","email":"matt.clark@brandingbrand.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.3","dependencies":{"axios":"~0.27.2","react":"^16.14.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.5","reflect-metadata":"^0.1.13","@brandingbrand/fslinker":"11.87.1","@brandingbrand/fsnetwork":"11.87.1","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.87.1","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.87.1_1686857052762_0.4883535366757292","host":"s3://npm-registry-packages"}},"12.0.0-alpha.16":{"name":"@brandingbrand/fsengage","version":"12.0.0-alpha.16","license":"MIT","_id":"@brandingbrand/fsengage@12.0.0-alpha.16","maintainers":[{"name":"jwitz611","email":"jared@brandingbrand.com"},{"name":"larafawz","email":"lara.fawz@brandingbrand.com"},{"name":"dannybelcher","email":"dannybelcher@att.net"},{"name":"christian-bb","email":"christian.wong@brandingbrand.com"},{"name":"diaw.psd","email":"papa.diaw@brandingbrand.com"},{"name":"oscar.mejia","email":"oscar.mejia@brandingbrand.com"},{"name":"eberghoff","email":"evan.berghoff@brandingbrand.com"},{"name":"astgerbb","email":"andrew.stgermain@brandingbrand.com"},{"name":"bbtravisreadonly","email":"travis@brandingbrand.com"},{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"john-marcello","email":"john.marcello@yahoo.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"gregwinn","email":"winn.greg@gmail.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"},{"name":"christianlovern","email":"lovernchristian@gmail.com"}],"dist":{"shasum":"accc0db0b079501b8ccb1747dcd00329d8690cdd","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-12.0.0-alpha.16.tgz","fileCount":111,"integrity":"sha512-VpAOlhO20Z5ob+xXFGwljK4EbwhIHH+O3yooGyGaIJJCJRYfyqqH6a7//dn28aLhbwkCjnB/aaYXg9dXCxoJJg==","signatures":[{"sig":"MEUCIQCr+GxImVW0grA86zs4NDf+Fp936r9FSQ5ez+/axrDKxgIgZ+ZZZDNGoJohAVO847yWmMjbQFjJqiU4ICbdqt6c0s4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":258154},"main":"./src/index.js","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\nwill support Demandware.\n\n- [Analytics](#analytics)\n  - [Analytics Providers](#analytics-providers)\n  - [Analytics Providers Configuration](#analytics-configurations)\n    - [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    - [Leanplum](#LeanplumProviderConfiguration)\n    - [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    - [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  - [Analytics Constructors](#analytics-constructors)\n  - [Analytics Tracking](#tracking-functions)\n    - [Ecommerce Function Signatures](#ecommerce)\n    - [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    - [App Lifecycle Function Signatures](#app-lifecycle)\n    - [Full List of Property Parameters for Tracking](#parameters)\n    - [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n- [CMS](#cms)\n  - [CMS Providers](#cms-providers)\n    - [Core](#core)\n    - [Demandware](#demandware)\n  - [CMS API](#cms-api)\n    - [CMS Configurations](#cms-configurations)\n    - [CMS Constructors](#cms-constructors)\n    - [Functionality](#cms-constructors)\n- [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n**Warning**: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n| Property       |  Type  | Required |\n| -------------- | :----: | :------: |\n| userAgent      | string | **yes**  |\n| osType         | string | **yes**  |\n| osVersion      | string | **yes**  |\n| appName        | string | **yes**  |\n| appId          | string | **yes**  |\n| appVersion     | string | **yes**  |\n| appInstallerId | string |    no    |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| clientId      | string | **yes**  |\n| clientSecret  | string | **yes**  |\n| reportSuiteId | string | **yes**  |\n\n**Note**: This configuration just applies for web environments. For native environment\nconfiguration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n| Property     |  Type  | Required |\n| ------------ | :----: | :------: |\n| trackerId    | string | **yes**  |\n| clientId     | string | **yes**  |\n| trackerName  | string |    no    |\n| cookieDomain | string |    no    |\n\n#### # LeanplumProviderConfiguration\n\n| Property              |  Type  | Required |\n| --------------------- | :----: | :------: |\n| appId                 | string | **yes**  |\n| key                   | string | **yes**  |\n| monetizationEventName | string |    no    |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version,\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID(),\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\n\nconst analytics = new Analytics([google]);\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\nand begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\nyou might want to add a click tracker to your 'Add To Cart' button. It's as simple as adding the\nfollowing code to your success handler (assuming you only want to tracks successful adds):\n\n```javascript\nAnalytics.click.generic('Add to Bag', {\n  identifier: variantId,\n  name: 'PDP',\n});\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\nAnalytics.screenview('ProductDetail', {\n  url: 'www.example.com/products/123',\n});\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| name          | string | **yes\\*** |\n| index         | number |    no     |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| number        | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n#### # ContactEmail\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| to            | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n#### # ImpressionGeneric\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| name          | string | **yes\\*** |\n| index         | number |    no     |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| identifier    | string | **yes**  |\n| name          | string | **yes**  |\n| brand         | string |    no    |\n| category      | string |    no    |\n| list          | string |    no    |\n| variant       | string |    no    |\n| price         | number |    no    |\n| index         | number |    no    |\n| gaQueryParams | object |    no    |\n\n#### # LocationDirections\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| address       | string | **yes\\*** |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| name          |  string  | **yes**  |\n| brand         |  string  |    no    |\n| category      |  string  |    no    |\n| variant       |  string  |    no    |\n| coupons       | string[] |    no    |\n| price         |  string  |    no    |\n| quantity      |  number  |    no    |\n| index         |  number  |    no    |\n| gaQueryParams |  object  |    no    |\n\n#### # Promotion\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| identifier    | string | **yes**  |\n| name          | string | **yes**  |\n| creative      | string |    no    |\n| slot          | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # RefundProduct\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| quantity      |  number  | **yes**  |\n| price         |  string  |    no    |\n| coupons       | string[] |    no    |\n| gaQueryParams |  object  |    no    |\n\n#### # SearchGeneric\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| term          | string | **yes**  |\n| count         | number |    no    |\n| gaQueryParams | object |    no    |\n\n#### # Screenview\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| url           | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n### Actions\n\n#### # ProductAction\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| list          | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # CheckoutAction\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| step          | number |    no    |\n| option        | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # TransactionAction\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| affiliation   |  string  |    no    |\n| revenue       |  string  |    no    |\n| tax           |  string  |    no    |\n| shippingCost  |  string  |    no    |\n| coupons       | string[] |    no    |\n| gaQueryParams |  object  |    no    |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45',\n    },\n  },\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n- City\n- Country\n- Date\n- Postal Code\n- Region\n- State\n- Time of Day\n- Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n| Property    |  Type  | Required |\n| ----------- | :----: | :------: |\n| propertyId  | string | **yes**  |\n| environment | number | **yes**  |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"f10ac6562958c68d7e394ad7d6f9106c2f76879f","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"9.6.2","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"16.13.1","dependencies":{"axios":"0.24.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","reflect-metadata":"^0.1.13","@brandingbrand/fslinker":"12.0.0-alpha.16","@brandingbrand/fsnetwork":"12.0.0-alpha.16","@leanplum/react-native-sdk":"1.3.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"12.0.0-alpha.16","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"react":"*","react-native":"*"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_12.0.0-alpha.16_1687792326690_0.8580173560801854","host":"s3://npm-registry-packages"}},"12.0.0-alpha.17":{"name":"@brandingbrand/fsengage","version":"12.0.0-alpha.17","license":"MIT","_id":"@brandingbrand/fsengage@12.0.0-alpha.17","maintainers":[{"name":"jwitz611","email":"jared@brandingbrand.com"},{"name":"larafawz","email":"lara.fawz@brandingbrand.com"},{"name":"dannybelcher","email":"dannybelcher@att.net"},{"name":"christian-bb","email":"christian.wong@brandingbrand.com"},{"name":"diaw.psd","email":"papa.diaw@brandingbrand.com"},{"name":"oscar.mejia","email":"oscar.mejia@brandingbrand.com"},{"name":"eberghoff","email":"evan.berghoff@brandingbrand.com"},{"name":"astgerbb","email":"andrew.stgermain@brandingbrand.com"},{"name":"bbtravisreadonly","email":"travis@brandingbrand.com"},{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"}],"dist":{"shasum":"1f181f0a99403acfb2816514a0b79a6c15520e8d","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-12.0.0-alpha.17.tgz","fileCount":111,"integrity":"sha512-6uzU+fPpdu6SvFzY690IbMltseCeaNCxDv4GDhc2M518/NsbsaFEmwI+npLcky9nLqO2HJHlGJkJG9y/udkUrA==","signatures":[{"sig":"MEYCIQCGX/R+pGxfy43+Y291p2XEZE94Ml0p1w8K6UYv0gdFLgIhAOdrLy7+GxqWiInU5eGM8f7XTD1RrA528RFi2cQOqXQK","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":258154},"main":"./src/index.js","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\nwill support Demandware.\n\n- [Analytics](#analytics)\n  - [Analytics Providers](#analytics-providers)\n  - [Analytics Providers Configuration](#analytics-configurations)\n    - [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    - [Leanplum](#LeanplumProviderConfiguration)\n    - [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    - [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  - [Analytics Constructors](#analytics-constructors)\n  - [Analytics Tracking](#tracking-functions)\n    - [Ecommerce Function Signatures](#ecommerce)\n    - [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    - [App Lifecycle Function Signatures](#app-lifecycle)\n    - [Full List of Property Parameters for Tracking](#parameters)\n    - [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n- [CMS](#cms)\n  - [CMS Providers](#cms-providers)\n    - [Core](#core)\n    - [Demandware](#demandware)\n  - [CMS API](#cms-api)\n    - [CMS Configurations](#cms-configurations)\n    - [CMS Constructors](#cms-constructors)\n    - [Functionality](#cms-constructors)\n- [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n**Warning**: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n| Property       |  Type  | Required |\n| -------------- | :----: | :------: |\n| userAgent      | string | **yes**  |\n| osType         | string | **yes**  |\n| osVersion      | string | **yes**  |\n| appName        | string | **yes**  |\n| appId          | string | **yes**  |\n| appVersion     | string | **yes**  |\n| appInstallerId | string |    no    |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| clientId      | string | **yes**  |\n| clientSecret  | string | **yes**  |\n| reportSuiteId | string | **yes**  |\n\n**Note**: This configuration just applies for web environments. For native environment\nconfiguration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n| Property     |  Type  | Required |\n| ------------ | :----: | :------: |\n| trackerId    | string | **yes**  |\n| clientId     | string | **yes**  |\n| trackerName  | string |    no    |\n| cookieDomain | string |    no    |\n\n#### # LeanplumProviderConfiguration\n\n| Property              |  Type  | Required |\n| --------------------- | :----: | :------: |\n| appId                 | string | **yes**  |\n| key                   | string | **yes**  |\n| monetizationEventName | string |    no    |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version,\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID(),\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\n\nconst analytics = new Analytics([google]);\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\nand begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\nyou might want to add a click tracker to your 'Add To Cart' button. It's as simple as adding the\nfollowing code to your success handler (assuming you only want to tracks successful adds):\n\n```javascript\nAnalytics.click.generic('Add to Bag', {\n  identifier: variantId,\n  name: 'PDP',\n});\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\nAnalytics.screenview('ProductDetail', {\n  url: 'www.example.com/products/123',\n});\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| name          | string | **yes\\*** |\n| index         | number |    no     |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| number        | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n#### # ContactEmail\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| to            | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n#### # ImpressionGeneric\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| name          | string | **yes\\*** |\n| index         | number |    no     |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| identifier    | string | **yes**  |\n| name          | string | **yes**  |\n| brand         | string |    no    |\n| category      | string |    no    |\n| list          | string |    no    |\n| variant       | string |    no    |\n| price         | number |    no    |\n| index         | number |    no    |\n| gaQueryParams | object |    no    |\n\n#### # LocationDirections\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| address       | string | **yes\\*** |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| name          |  string  | **yes**  |\n| brand         |  string  |    no    |\n| category      |  string  |    no    |\n| variant       |  string  |    no    |\n| coupons       | string[] |    no    |\n| price         |  string  |    no    |\n| quantity      |  number  |    no    |\n| index         |  number  |    no    |\n| gaQueryParams |  object  |    no    |\n\n#### # Promotion\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| identifier    | string | **yes**  |\n| name          | string | **yes**  |\n| creative      | string |    no    |\n| slot          | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # RefundProduct\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| quantity      |  number  | **yes**  |\n| price         |  string  |    no    |\n| coupons       | string[] |    no    |\n| gaQueryParams |  object  |    no    |\n\n#### # SearchGeneric\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| term          | string | **yes**  |\n| count         | number |    no    |\n| gaQueryParams | object |    no    |\n\n#### # Screenview\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| url           | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n### Actions\n\n#### # ProductAction\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| list          | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # CheckoutAction\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| step          | number |    no    |\n| option        | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # TransactionAction\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| affiliation   |  string  |    no    |\n| revenue       |  string  |    no    |\n| tax           |  string  |    no    |\n| shippingCost  |  string  |    no    |\n| coupons       | string[] |    no    |\n| gaQueryParams |  object  |    no    |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45',\n    },\n  },\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n- City\n- Country\n- Date\n- Postal Code\n- Region\n- State\n- Time of Day\n- Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n| Property    |  Type  | Required |\n| ----------- | :----: | :------: |\n| propertyId  | string | **yes**  |\n| environment | number | **yes**  |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"fed6d0f4643d52a36a87a895bf4ed3fbe4e09faf","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"9.6.2","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"16.13.1","dependencies":{"axios":"0.24.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","reflect-metadata":"^0.1.13","@brandingbrand/fslinker":"12.0.0-alpha.17","@brandingbrand/fsnetwork":"12.0.0-alpha.17","@leanplum/react-native-sdk":"1.3.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"12.0.0-alpha.17","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"react":"*","react-native":"*"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_12.0.0-alpha.17_1688138833362_0.961697753526368","host":"s3://npm-registry-packages"}},"12.0.0-alpha.18":{"name":"@brandingbrand/fsengage","version":"12.0.0-alpha.18","license":"MIT","_id":"@brandingbrand/fsengage@12.0.0-alpha.18","maintainers":[{"name":"jwitz611","email":"jared@brandingbrand.com"},{"name":"larafawz","email":"lara.fawz@brandingbrand.com"},{"name":"dannybelcher","email":"dannybelcher@att.net"},{"name":"christian-bb","email":"christian.wong@brandingbrand.com"},{"name":"diaw.psd","email":"papa.diaw@brandingbrand.com"},{"name":"oscar.mejia","email":"oscar.mejia@brandingbrand.com"},{"name":"eberghoff","email":"evan.berghoff@brandingbrand.com"},{"name":"astgerbb","email":"andrew.stgermain@brandingbrand.com"},{"name":"bbtravisreadonly","email":"travis@brandingbrand.com"},{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"}],"dist":{"shasum":"a5c38c353e13279d9708e592ec7c1d5b032fc9ae","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-12.0.0-alpha.18.tgz","fileCount":111,"integrity":"sha512-D4Usdd0LLY/kK4xpxP1krGKQuwwuawAsMZpNkjdV4I8GEVKP3YkJoveoIZyu4TQmE6F3uM2dXf3JRsMFccSHCw==","signatures":[{"sig":"MEUCIE16STDXT751qcwylUWvS3ISMwz2uFpWThUL+3w4/f0fAiEAhxpvCqkWsAWKKGUXi+7TWLd2TXHiCeK3f7xsgmtvuWE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":258154},"main":"./src/index.js","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\nwill support Demandware.\n\n- [Analytics](#analytics)\n  - [Analytics Providers](#analytics-providers)\n  - [Analytics Providers Configuration](#analytics-configurations)\n    - [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    - [Leanplum](#LeanplumProviderConfiguration)\n    - [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    - [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  - [Analytics Constructors](#analytics-constructors)\n  - [Analytics Tracking](#tracking-functions)\n    - [Ecommerce Function Signatures](#ecommerce)\n    - [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    - [App Lifecycle Function Signatures](#app-lifecycle)\n    - [Full List of Property Parameters for Tracking](#parameters)\n    - [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n- [CMS](#cms)\n  - [CMS Providers](#cms-providers)\n    - [Core](#core)\n    - [Demandware](#demandware)\n  - [CMS API](#cms-api)\n    - [CMS Configurations](#cms-configurations)\n    - [CMS Constructors](#cms-constructors)\n    - [Functionality](#cms-constructors)\n- [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n**Warning**: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n| Property       |  Type  | Required |\n| -------------- | :----: | :------: |\n| userAgent      | string | **yes**  |\n| osType         | string | **yes**  |\n| osVersion      | string | **yes**  |\n| appName        | string | **yes**  |\n| appId          | string | **yes**  |\n| appVersion     | string | **yes**  |\n| appInstallerId | string |    no    |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| clientId      | string | **yes**  |\n| clientSecret  | string | **yes**  |\n| reportSuiteId | string | **yes**  |\n\n**Note**: This configuration just applies for web environments. For native environment\nconfiguration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n| Property     |  Type  | Required |\n| ------------ | :----: | :------: |\n| trackerId    | string | **yes**  |\n| clientId     | string | **yes**  |\n| trackerName  | string |    no    |\n| cookieDomain | string |    no    |\n\n#### # LeanplumProviderConfiguration\n\n| Property              |  Type  | Required |\n| --------------------- | :----: | :------: |\n| appId                 | string | **yes**  |\n| key                   | string | **yes**  |\n| monetizationEventName | string |    no    |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version,\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID(),\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\n\nconst analytics = new Analytics([google]);\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\nand begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\nyou might want to add a click tracker to your 'Add To Cart' button. It's as simple as adding the\nfollowing code to your success handler (assuming you only want to tracks successful adds):\n\n```javascript\nAnalytics.click.generic('Add to Bag', {\n  identifier: variantId,\n  name: 'PDP',\n});\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\nAnalytics.screenview('ProductDetail', {\n  url: 'www.example.com/products/123',\n});\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| name          | string | **yes\\*** |\n| index         | number |    no     |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| number        | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n#### # ContactEmail\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| to            | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n#### # ImpressionGeneric\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| name          | string | **yes\\*** |\n| index         | number |    no     |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| identifier    | string | **yes**  |\n| name          | string | **yes**  |\n| brand         | string |    no    |\n| category      | string |    no    |\n| list          | string |    no    |\n| variant       | string |    no    |\n| price         | number |    no    |\n| index         | number |    no    |\n| gaQueryParams | object |    no    |\n\n#### # LocationDirections\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| address       | string | **yes\\*** |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| name          |  string  | **yes**  |\n| brand         |  string  |    no    |\n| category      |  string  |    no    |\n| variant       |  string  |    no    |\n| coupons       | string[] |    no    |\n| price         |  string  |    no    |\n| quantity      |  number  |    no    |\n| index         |  number  |    no    |\n| gaQueryParams |  object  |    no    |\n\n#### # Promotion\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| identifier    | string | **yes**  |\n| name          | string | **yes**  |\n| creative      | string |    no    |\n| slot          | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # RefundProduct\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| quantity      |  number  | **yes**  |\n| price         |  string  |    no    |\n| coupons       | string[] |    no    |\n| gaQueryParams |  object  |    no    |\n\n#### # SearchGeneric\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| term          | string | **yes**  |\n| count         | number |    no    |\n| gaQueryParams | object |    no    |\n\n#### # Screenview\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| url           | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n### Actions\n\n#### # ProductAction\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| list          | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # CheckoutAction\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| step          | number |    no    |\n| option        | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # TransactionAction\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| affiliation   |  string  |    no    |\n| revenue       |  string  |    no    |\n| tax           |  string  |    no    |\n| shippingCost  |  string  |    no    |\n| coupons       | string[] |    no    |\n| gaQueryParams |  object  |    no    |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45',\n    },\n  },\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n- City\n- Country\n- Date\n- Postal Code\n- Region\n- State\n- Time of Day\n- Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n| Property    |  Type  | Required |\n| ----------- | :----: | :------: |\n| propertyId  | string | **yes**  |\n| environment | number | **yes**  |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"45a77677d9da512ab67f8fb73aec85ac014fdce7","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"9.6.2","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"16.13.1","dependencies":{"axios":"0.24.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","reflect-metadata":"^0.1.13","@brandingbrand/fslinker":"12.0.0-alpha.18","@brandingbrand/fsnetwork":"12.0.0-alpha.18","@leanplum/react-native-sdk":"1.3.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"12.0.0-alpha.18","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"react":"*","react-native":"*"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_12.0.0-alpha.18_1688582609687_0.4200837203932051","host":"s3://npm-registry-packages"}},"12.0.0-alpha.19":{"name":"@brandingbrand/fsengage","version":"12.0.0-alpha.19","license":"MIT","_id":"@brandingbrand/fsengage@12.0.0-alpha.19","maintainers":[{"name":"jwitz611","email":"jared@brandingbrand.com"},{"name":"larafawz","email":"lara.fawz@brandingbrand.com"},{"name":"dannybelcher","email":"dannybelcher@att.net"},{"name":"christian-bb","email":"christian.wong@brandingbrand.com"},{"name":"diaw.psd","email":"papa.diaw@brandingbrand.com"},{"name":"oscar.mejia","email":"oscar.mejia@brandingbrand.com"},{"name":"eberghoff","email":"evan.berghoff@brandingbrand.com"},{"name":"astgerbb","email":"andrew.stgermain@brandingbrand.com"},{"name":"bbtravisreadonly","email":"travis@brandingbrand.com"},{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"mylo-james-bb","email":"mylo.james@brandingbrand.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"}],"dist":{"shasum":"f7ec27eebb362e583bad98626db13e08531353b9","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-12.0.0-alpha.19.tgz","fileCount":111,"integrity":"sha512-DKRqNsiFfej8PK6dNUUUp3+gqaibngIkt1RoH/jixbvx9Iv9We3tLe7SLLnvzIWYs3Mv8IlZ+zoVkZuyc/+Ukg==","signatures":[{"sig":"MEUCIQCwy2wKVZ7j6CZC4g7vf1bsMI06oFpiNekfWn4u6aZG/gIgWzG9F18ht6JFggz6+KNyAxWS0GderlprhGuJ/OeBkdk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":258154},"main":"./src/index.js","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\nwill support Demandware.\n\n- [Analytics](#analytics)\n  - [Analytics Providers](#analytics-providers)\n  - [Analytics Providers Configuration](#analytics-configurations)\n    - [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    - [Leanplum](#LeanplumProviderConfiguration)\n    - [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    - [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  - [Analytics Constructors](#analytics-constructors)\n  - [Analytics Tracking](#tracking-functions)\n    - [Ecommerce Function Signatures](#ecommerce)\n    - [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    - [App Lifecycle Function Signatures](#app-lifecycle)\n    - [Full List of Property Parameters for Tracking](#parameters)\n    - [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n- [CMS](#cms)\n  - [CMS Providers](#cms-providers)\n    - [Core](#core)\n    - [Demandware](#demandware)\n  - [CMS API](#cms-api)\n    - [CMS Configurations](#cms-configurations)\n    - [CMS Constructors](#cms-constructors)\n    - [Functionality](#cms-constructors)\n- [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n**Warning**: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n| Property       |  Type  | Required |\n| -------------- | :----: | :------: |\n| userAgent      | string | **yes**  |\n| osType         | string | **yes**  |\n| osVersion      | string | **yes**  |\n| appName        | string | **yes**  |\n| appId          | string | **yes**  |\n| appVersion     | string | **yes**  |\n| appInstallerId | string |    no    |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| clientId      | string | **yes**  |\n| clientSecret  | string | **yes**  |\n| reportSuiteId | string | **yes**  |\n\n**Note**: This configuration just applies for web environments. For native environment\nconfiguration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n| Property     |  Type  | Required |\n| ------------ | :----: | :------: |\n| trackerId    | string | **yes**  |\n| clientId     | string | **yes**  |\n| trackerName  | string |    no    |\n| cookieDomain | string |    no    |\n\n#### # LeanplumProviderConfiguration\n\n| Property              |  Type  | Required |\n| --------------------- | :----: | :------: |\n| appId                 | string | **yes**  |\n| key                   | string | **yes**  |\n| monetizationEventName | string |    no    |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version,\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID(),\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\n\nconst analytics = new Analytics([google]);\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\nand begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\nyou might want to add a click tracker to your 'Add To Cart' button. It's as simple as adding the\nfollowing code to your success handler (assuming you only want to tracks successful adds):\n\n```javascript\nAnalytics.click.generic('Add to Bag', {\n  identifier: variantId,\n  name: 'PDP',\n});\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\nAnalytics.screenview('ProductDetail', {\n  url: 'www.example.com/products/123',\n});\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| name          | string | **yes\\*** |\n| index         | number |    no     |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| number        | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n#### # ContactEmail\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| to            | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n#### # ImpressionGeneric\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| name          | string | **yes\\*** |\n| index         | number |    no     |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| identifier    | string | **yes**  |\n| name          | string | **yes**  |\n| brand         | string |    no    |\n| category      | string |    no    |\n| list          | string |    no    |\n| variant       | string |    no    |\n| price         | number |    no    |\n| index         | number |    no    |\n| gaQueryParams | object |    no    |\n\n#### # LocationDirections\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| address       | string | **yes\\*** |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| name          |  string  | **yes**  |\n| brand         |  string  |    no    |\n| category      |  string  |    no    |\n| variant       |  string  |    no    |\n| coupons       | string[] |    no    |\n| price         |  string  |    no    |\n| quantity      |  number  |    no    |\n| index         |  number  |    no    |\n| gaQueryParams |  object  |    no    |\n\n#### # Promotion\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| identifier    | string | **yes**  |\n| name          | string | **yes**  |\n| creative      | string |    no    |\n| slot          | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # RefundProduct\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| quantity      |  number  | **yes**  |\n| price         |  string  |    no    |\n| coupons       | string[] |    no    |\n| gaQueryParams |  object  |    no    |\n\n#### # SearchGeneric\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| term          | string | **yes**  |\n| count         | number |    no    |\n| gaQueryParams | object |    no    |\n\n#### # Screenview\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| url           | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n### Actions\n\n#### # ProductAction\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| list          | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # CheckoutAction\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| step          | number |    no    |\n| option        | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # TransactionAction\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| affiliation   |  string  |    no    |\n| revenue       |  string  |    no    |\n| tax           |  string  |    no    |\n| shippingCost  |  string  |    no    |\n| coupons       | string[] |    no    |\n| gaQueryParams |  object  |    no    |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45',\n    },\n  },\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n- City\n- Country\n- Date\n- Postal Code\n- Region\n- State\n- Time of Day\n- Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n| Property    |  Type  | Required |\n| ----------- | :----: | :------: |\n| propertyId  | string | **yes**  |\n| environment | number | **yes**  |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"45a77677d9da512ab67f8fb73aec85ac014fdce7","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"9.6.2","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"16.13.1","dependencies":{"axios":"0.24.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","reflect-metadata":"^0.1.13","@brandingbrand/fslinker":"12.0.0-alpha.19","@brandingbrand/fsnetwork":"12.0.0-alpha.19","@leanplum/react-native-sdk":"1.3.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"12.0.0-alpha.19","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"react":"*","react-native":"*"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_12.0.0-alpha.19_1688610668524_0.5352559683450224","host":"s3://npm-registry-packages"}},"12.0.0-alpha.20":{"name":"@brandingbrand/fsengage","version":"12.0.0-alpha.20","license":"MIT","_id":"@brandingbrand/fsengage@12.0.0-alpha.20","maintainers":[{"name":"jwitz611","email":"jared@brandingbrand.com"},{"name":"larafawz","email":"lara.fawz@brandingbrand.com"},{"name":"dannybelcher","email":"dannybelcher@att.net"},{"name":"christian-bb","email":"christian.wong@brandingbrand.com"},{"name":"diaw.psd","email":"papa.diaw@brandingbrand.com"},{"name":"oscar.mejia","email":"oscar.mejia@brandingbrand.com"},{"name":"eberghoff","email":"evan.berghoff@brandingbrand.com"},{"name":"astgerbb","email":"andrew.stgermain@brandingbrand.com"},{"name":"bbtravisreadonly","email":"travis@brandingbrand.com"},{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"}],"dist":{"shasum":"d1b5856f26d34f20b013efced2c8d9f7b1f0ffcb","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-12.0.0-alpha.20.tgz","fileCount":111,"integrity":"sha512-K8b/8x8WdxIRvwdUN/ZKrYXOKa5jSxvM/tqjoG7eiuY00WLTEtWGUnCQp2tV/bD2sHffnUqBzyTJlVTmFLqREw==","signatures":[{"sig":"MEUCIFeL1AbZt2ctcxwaF2C8DMTMNdAiokUKSPMX+e0j4+cbAiEA7IGfCJvBl16cwQrpIf3XHYAtxQhao7zWe6HXnnSWHys=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":258154},"main":"./src/index.js","readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\nwill support Demandware.\n\n- [Analytics](#analytics)\n  - [Analytics Providers](#analytics-providers)\n  - [Analytics Providers Configuration](#analytics-configurations)\n    - [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    - [Leanplum](#LeanplumProviderConfiguration)\n    - [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    - [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  - [Analytics Constructors](#analytics-constructors)\n  - [Analytics Tracking](#tracking-functions)\n    - [Ecommerce Function Signatures](#ecommerce)\n    - [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    - [App Lifecycle Function Signatures](#app-lifecycle)\n    - [Full List of Property Parameters for Tracking](#parameters)\n    - [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n- [CMS](#cms)\n  - [CMS Providers](#cms-providers)\n    - [Core](#core)\n    - [Demandware](#demandware)\n  - [CMS API](#cms-api)\n    - [CMS Configurations](#cms-configurations)\n    - [CMS Constructors](#cms-constructors)\n    - [Functionality](#cms-constructors)\n- [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n**Warning**: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n| Property       |  Type  | Required |\n| -------------- | :----: | :------: |\n| userAgent      | string | **yes**  |\n| osType         | string | **yes**  |\n| osVersion      | string | **yes**  |\n| appName        | string | **yes**  |\n| appId          | string | **yes**  |\n| appVersion     | string | **yes**  |\n| appInstallerId | string |    no    |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| clientId      | string | **yes**  |\n| clientSecret  | string | **yes**  |\n| reportSuiteId | string | **yes**  |\n\n**Note**: This configuration just applies for web environments. For native environment\nconfiguration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n| Property     |  Type  | Required |\n| ------------ | :----: | :------: |\n| trackerId    | string | **yes**  |\n| clientId     | string | **yes**  |\n| trackerName  | string |    no    |\n| cookieDomain | string |    no    |\n\n#### # LeanplumProviderConfiguration\n\n| Property              |  Type  | Required |\n| --------------------- | :----: | :------: |\n| appId                 | string | **yes**  |\n| key                   | string | **yes**  |\n| monetizationEventName | string |    no    |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version,\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID(),\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\n\nconst analytics = new Analytics([google]);\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\nand begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\nyou might want to add a click tracker to your 'Add To Cart' button. It's as simple as adding the\nfollowing code to your success handler (assuming you only want to tracks successful adds):\n\n```javascript\nAnalytics.click.generic('Add to Bag', {\n  identifier: variantId,\n  name: 'PDP',\n});\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\nAnalytics.screenview('ProductDetail', {\n  url: 'www.example.com/products/123',\n});\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| name          | string | **yes\\*** |\n| index         | number |    no     |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| number        | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n#### # ContactEmail\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| to            | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n#### # ImpressionGeneric\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| name          | string | **yes\\*** |\n| index         | number |    no     |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| identifier    | string | **yes**  |\n| name          | string | **yes**  |\n| brand         | string |    no    |\n| category      | string |    no    |\n| list          | string |    no    |\n| variant       | string |    no    |\n| price         | number |    no    |\n| index         | number |    no    |\n| gaQueryParams | object |    no    |\n\n#### # LocationDirections\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| address       | string | **yes\\*** |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| name          |  string  | **yes**  |\n| brand         |  string  |    no    |\n| category      |  string  |    no    |\n| variant       |  string  |    no    |\n| coupons       | string[] |    no    |\n| price         |  string  |    no    |\n| quantity      |  number  |    no    |\n| index         |  number  |    no    |\n| gaQueryParams |  object  |    no    |\n\n#### # Promotion\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| identifier    | string | **yes**  |\n| name          | string | **yes**  |\n| creative      | string |    no    |\n| slot          | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # RefundProduct\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| quantity      |  number  | **yes**  |\n| price         |  string  |    no    |\n| coupons       | string[] |    no    |\n| gaQueryParams |  object  |    no    |\n\n#### # SearchGeneric\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| term          | string | **yes**  |\n| count         | number |    no    |\n| gaQueryParams | object |    no    |\n\n#### # Screenview\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| url           | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n### Actions\n\n#### # ProductAction\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| list          | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # CheckoutAction\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| step          | number |    no    |\n| option        | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # TransactionAction\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| affiliation   |  string  |    no    |\n| revenue       |  string  |    no    |\n| tax           |  string  |    no    |\n| shippingCost  |  string  |    no    |\n| coupons       | string[] |    no    |\n| gaQueryParams |  object  |    no    |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45',\n    },\n  },\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n- City\n- Country\n- Date\n- Postal Code\n- Region\n- State\n- Time of Day\n- Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n| Property    |  Type  | Required |\n| ----------- | :----: | :------: |\n| propertyId  | string | **yes**  |\n| environment | number | **yes**  |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","gitHead":"173e674abbbb3837d89e04e6054d37db1f0370d1","typings":"./src/index.d.ts","_npmUser":{"name":"branderbrett","email":"brett@brandingbrand.com"},"_npmVersion":"9.6.2","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"16.13.1","dependencies":{"axios":"0.24.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","reflect-metadata":"^0.1.13","@brandingbrand/fslinker":"12.0.0-alpha.20","@brandingbrand/fsnetwork":"12.0.0-alpha.20","@leanplum/react-native-sdk":"1.3.0","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"12.0.0-alpha.20","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"react":"*","react-native":"*"},"_npmOperationalInternal":{"tmp":"tmp/fsengage_12.0.0-alpha.20_1688757372858_0.5592221026333581","host":"s3://npm-registry-packages"}},"11.88.0":{"name":"@brandingbrand/fsengage","version":"11.88.0","license":"MIT","_id":"@brandingbrand/fsengage@11.88.0","maintainers":[{"name":"michael.walker.brandingbrand","email":"michael.walker@brandingbrand.com"},{"name":"jwitz611","email":"jared@brandingbrand.com"},{"name":"larafawz","email":"lara.fawz@brandingbrand.com"},{"name":"dannybelcher","email":"dannybelcher@att.net"},{"name":"christian-bb","email":"christian.wong@brandingbrand.com"},{"name":"diaw.psd","email":"papa.diaw@brandingbrand.com"},{"name":"oscar.mejia","email":"oscar.mejia@brandingbrand.com"},{"name":"eberghoff","email":"evan.berghoff@brandingbrand.com"},{"name":"astgerbb","email":"andrew.stgermain@brandingbrand.com"},{"name":"bbtravisreadonly","email":"travis@brandingbrand.com"},{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"}],"dist":{"shasum":"0db399ca642139588b8950bb80b7b16568fd1fc3","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.88.0.tgz","fileCount":111,"integrity":"sha512-EJm1SOJASqvnOOz48Y4HhPy6dTMF50tl3+Y05EBjo3TD/GTk5bw+Z/yoNuQLMzM6dx/j5zb5gGGZ91tu/QygEQ==","signatures":[{"sig":"MEUCIBvERFl0RiLcvY7gYCrSC7Q6GF3kBBuhtGZNRVtpsYRrAiEA4OpsXHU+HTQPpnqMJcs+S5ZYQkvgvV9fxbpgVTCpd3o=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":258881},"main":"./src/index.js","gitHead":"086713ff33886398e2ebf7647efed520e22f8311","typings":"./src/index.d.ts","_npmUser":{"name":"winescout","email":"matt.clark@brandingbrand.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.3","dependencies":{"axios":"~0.27.2","react":"^16.14.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.5","reflect-metadata":"^0.1.13","@brandingbrand/fslinker":"11.88.0","@brandingbrand/fsnetwork":"11.88.0","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.88.0","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.88.0_1691639438710_0.14745481016778994","host":"s3://npm-registry-packages"}},"11.88.1":{"name":"@brandingbrand/fsengage","version":"11.88.1","license":"MIT","_id":"@brandingbrand/fsengage@11.88.1","maintainers":[{"name":"michael.walker.brandingbrand","email":"michael.walker@brandingbrand.com"},{"name":"jwitz611","email":"jared@brandingbrand.com"},{"name":"larafawz","email":"lara.fawz@brandingbrand.com"},{"name":"dannybelcher","email":"dannybelcher@att.net"},{"name":"christian-bb","email":"christian.wong@brandingbrand.com"},{"name":"diaw.psd","email":"papa.diaw@brandingbrand.com"},{"name":"oscar.mejia","email":"oscar.mejia@brandingbrand.com"},{"name":"eberghoff","email":"evan.berghoff@brandingbrand.com"},{"name":"astgerbb","email":"andrew.stgermain@brandingbrand.com"},{"name":"bbtravisreadonly","email":"travis@brandingbrand.com"},{"name":"ftytw","email":"kirovpavel69@gmail.com"},{"name":"jeffmerckens_bb","email":"jeff.merckens@brandingbrand.com"},{"name":"aconte21","email":"anthony.conte@brandingbrand.com"},{"name":"justin.heflin-bb","email":"justin.heflin@brandingbrand.com"},{"name":"briang123","email":"briang.sandiego@gmail.com"},{"name":"faroukelk","email":"faroukelkhayat@outlook.com"},{"name":"kevharvell_bb","email":"kevin.harvell@brandingbrand.com"},{"name":"johnhwang","email":"john.hwang@brandingbrand.com"},{"name":"mrivasperez","email":"mrivasperez@icloud.com"},{"name":"dannonbighambb","email":"dannon.bigham@brandingbrand.com"},{"name":"jkhawly","email":"joseph.khawly@brandingbrand.com"},{"name":"thepinkhatdev","email":"hossam.mohamed@brandingbrand.com"},{"name":"togrady01","email":"togrady01@gmail.com"},{"name":"denzimm","email":"prdslife@gmail.com"},{"name":"tom_thornton","email":"thomas.thornton@brandingbrand.com"},{"name":"milo.wyner","email":"milo.wyner@brandingbrand.com"},{"name":"pthomas","email":"parker.thomas@brandingbrand.com"},{"name":"byrondelpinal","email":"byron.delpinal@brandingbrand.com"},{"name":"glendonh","email":"glendon.hardin@gmail.com"},{"name":"alekseyflorya","email":"aleksey.florya@gmail.com"},{"name":"aarontjdev","email":"Aarontjdev@gmail.com"},{"name":"philtompkins","email":"philip.tompkins@brandingbrand.com"},{"name":"ray.wu","email":"ray.wu@brandingbrand.com"},{"name":"mjmangus16","email":"mjmangus@gmail.com"},{"name":"its.hui3","email":"xuhuizhu369@gmail.com"},{"name":"maksymdeminbbc","email":"maksym.demin@brandingbrand.com"},{"name":"amandaphail-bb","email":"amanda.phail@brandingbrand.com"},{"name":"markwissler","email":"mark.wissler@gmail.com"},{"name":"nathan-sankbeil","email":"nathan.sankbeil@brandingbrand.com"},{"name":"clapton","email":"camjwelt@gmail.com"},{"name":"swhite2","email":"sebastian.swhite@gmail.com"},{"name":"coughdrop","email":"cjdekalb@gmail.com"},{"name":"roanblanchard","email":"roan.blanchard@brandingbrand.com"},{"name":"chrisjlan89branding","email":"chris.lantier@brandingbrand.com"},{"name":"branderbrett","email":"brett@brandingbrand.com"},{"name":"skyeckstrom","email":"npm@skyeckstrom.com"},{"name":"nickburkhartbb","email":"nick.burkhart@brandingbrand.com"},{"name":"bbtravis","email":"travis+bbtravis@brandingbrand.com"},{"name":"deemaabdallah","email":"deema.abdallah@brandingbrand.com"},{"name":"msiauko","email":"mikhail@brandingbrand.com"},{"name":"evan.katz","email":"evan.katz@brandingbrand.com"},{"name":"davidwachlin.bb","email":"david.wachlin@brandingbrand.com"},{"name":"jasonmosleybb","email":"jason.mosley@brandingbrand.com"},{"name":"dshadrick","email":"dan.shadrick@brandingbrand.com"},{"name":"nickbb","email":"nick@brandingbrand.com"},{"name":"notajvento","email":"aj@brandingbrand.com"},{"name":"andyschwob","email":"andy.schwob@brandingbrand.com"},{"name":"brad.habenicht","email":"brad.habenicht@brandingbrand.com"},{"name":"rosahbruno","email":"bruno.rosa@brandingbrand.com"},{"name":"xero","email":"andrew.harrison@brandingbrand.com"},{"name":"mike.lux","email":"mike.lux@brandingbrand.com"},{"name":"varzamanbb","email":"stefan.neamtu@brandingbrand.com"},{"name":"bb_jenkins","email":"ops@brandingbrand.com"},{"name":"crherman7","email":"crherman7@gmail.com"},{"name":"olexandor","email":"olexandor.s@gmail.com"},{"name":"abhishek_npm","email":"abhishek.jain@brandingbrand.com"},{"name":"romaniukua","email":"romaniuk1511@gmail.com"},{"name":"tboetto","email":"anthonyboetto@gmail.com"},{"name":"zrispo","email":"zach.rispoli@gmail.com"},{"name":"omarkoueifi","email":"omarokmail@gmail.com"},{"name":"danish.khalid","email":"danish.khalid@brandingbrand.com"},{"name":"devs9-core","email":"devs7g@gmail.com"},{"name":"alex-black112","email":"alex.black@brandingbrand.com"},{"name":"nasliedkov","email":"nasliedkov@gmail.com"},{"name":"wsedlacekc","email":"william.sedlacek@icloud.com"},{"name":"bhushan.kini","email":"bhushan.kini@brandingbrand.com"},{"name":"beaukenny","email":"beaukenny@gmail.com"},{"name":"brandonacb","email":"brandon.bartlett@brandingbrand.com"},{"name":"seanirby","email":"sean.irby@brandingbrand.com"},{"name":"sauceknight","email":"aquirogatech@gmail.com"},{"name":"ckornell","email":"ckornell@gmail.com"},{"name":"jmwr","email":"johnmichael.w.riley@gmail.com"},{"name":"mjweb48","email":"michael.webster@brandingbrand.com"},{"name":"winescout","email":"matt.clark@brandingbrand.com"},{"name":"gametack","email":"eqo5037@gmail.com"},{"name":"bryan-boeing","email":"bryan.boeing@brandingbrand.com"},{"name":"dmitriy_pchela","email":"d.pchelyanskiy97z@gmail.com"},{"name":"a4heng","email":"andy.heng@brandingbrand.com"},{"name":"bbksmith","email":"kevin.smith@brandingbrand.com"},{"name":"jcsison","email":"jesser.sison@live.com"},{"name":"freesco16","email":"maksym.fedorenko@brandingbrand.com"},{"name":"scbb31994","email":"steve.cabrera@brandingbrand.com"}],"dist":{"shasum":"cdcd3b63008495b0a45d1a68a253f105715baa4d","tarball":"https://registry.npmjs.org/@brandingbrand/fsengage/-/fsengage-11.88.1.tgz","fileCount":111,"integrity":"sha512-9FINDXew79Lhk9V95WDWXST59c4ImjeUPNv5/UrY9B5V43o5mvito4wUu6Vj8/vrkCJ5bSRf1FzRdFDCmhJgMg==","signatures":[{"sig":"MEUCIQDkvXV9aHsjJ4uWIqKYY3+ioBTFJVrgWhIRGVDJlmMHWwIgVEWHXb+TCex+hg3uz/cUhFc1uR09ozKjPPSi9X/4Wjg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":258981},"main":"./src/index.js","gitHead":"dd2a5aa263dcd1302bee8653372980c5a8d73bc8","typings":"./src/index.d.ts","_npmUser":{"name":"winescout","email":"matt.clark@brandingbrand.com"},"_npmVersion":"8.5.5","description":"Analytics, CMS, and Settings module for Flagship","directories":{},"sideEffects":false,"_nodeVersion":"14.18.3","dependencies":{"axios":"~0.27.2","react":"^16.14.0","tslib":"^2.0.0","url-parse":"^1.4.3","decimal.js":"^10.0.1","react-native":"^0.63.5","reflect-metadata":"^0.1.13","@brandingbrand/fslinker":"11.88.1","@brandingbrand/fsnetwork":"11.88.1","react-native-permissions":"^2.2.2","@leanplum/react-native-sdk":"^1.2.1","@adobe/react-native-acpcore":"^1.2.5","@brandingbrand/types-location":"11.88.1","@adobe/react-native-acpanalytics":"^1.2.6","@brandingbrand/react-native-google-analytics":"^2.2.0"},"_hasShrinkwrap":false,"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/fsengage_11.88.1_1691691576537_0.13784999608769022","host":"s3://npm-registry-packages"}}},"time":{"created":"2018-06-29T23:33:23.599Z","modified":"2026-03-13T16:18:42.990Z","0.1.0-alpha.6df2baf3":"2018-06-28T21:48:26.838Z","0.1.0-alpha.970841a1":"2018-06-28T21:48:26.838Z","0.1.0-alpha.f5b41410":"2018-06-28T21:48:26.838Z","0.1.0-alpha.a0660744":"2018-06-28T21:48:26.838Z","0.1.0-alpha.f2ed193f":"2018-06-28T21:48:26.838Z","0.1.0-alpha.304c7291":"2018-06-28T21:48:26.838Z","0.1.0-alpha.445a241e":"2018-06-28T21:48:26.838Z","0.1.0-alpha.8a1ce6f5":"2018-06-28T21:48:26.838Z","0.1.0-alpha.aeb4b883":"2018-06-28T21:48:26.838Z","0.1.0-alpha.05d723bf":"2018-06-28T21:48:26.838Z","0.1.0-alpha.d12840ea":"2018-06-28T21:48:26.838Z","0.1.0-alpha.2e5e3f7f":"2018-06-28T21:48:26.838Z","0.1.0-alpha.c41a8edf":"2018-06-28T21:48:26.838Z","0.1.0-alpha.419c15c1":"2018-06-28T21:48:26.838Z","0.1.0-alpha.72390cb3":"2018-06-28T21:48:26.838Z","0.1.0-alpha.a9b33b1a":"2018-06-28T21:48:26.838Z","0.1.0-alpha.9cc2de81":"2018-06-28T21:48:26.838Z","0.1.0-alpha.0fb5bc25":"2018-06-28T21:48:26.838Z","0.1.0-alpha.42977bfd":"2018-06-28T21:48:26.838Z","0.1.0-alpha.87a835cd":"2018-06-28T21:48:26.838Z","0.1.0-alpha.c72f29a9":"2018-06-28T21:48:26.838Z","0.1.0-alpha.81628099":"2018-06-28T21:48:26.838Z","0.1.0-alpha.af8dc949":"2018-06-28T21:48:26.838Z","0.1.0-alpha.6e62e301":"2018-06-28T21:48:26.838Z","0.1.0-alpha.644fa845":"2018-06-28T21:48:26.838Z","0.1.0-alpha.e1e3cae5":"2018-06-28T21:48:26.838Z","0.1.0-alpha.0e9efb17":"2018-06-28T21:48:26.838Z","0.1.0-alpha.af75b305":"2018-06-28T21:48:26.838Z","0.1.0-alpha.e1a5d121":"2018-06-28T21:48:26.838Z","0.1.0-alpha.717e1e6a":"2018-06-28T21:48:26.838Z","0.1.0-alpha.ca5cedba":"2018-06-28T21:48:26.838Z","0.1.0-alpha.112772c1":"2018-06-28T21:48:26.838Z","0.1.0-alpha.3bd42d8f":"2018-06-28T21:48:26.838Z","0.1.0-alpha.428d2214":"2018-06-28T21:48:26.838Z","0.1.0-alpha.78dd1f8c":"2018-06-28T21:48:26.838Z","0.1.0-alpha.5c4f0d1d":"2018-06-28T21:48:26.838Z","0.1.0-alpha.16bfb799":"2018-06-28T21:48:26.838Z","0.1.0-alpha.9177df51":"2018-06-28T21:48:26.838Z","0.1.0-alpha.c29d24f0":"2018-06-28T21:48:26.838Z","0.1.0-alpha.b2c6b7bd":"2018-06-28T21:48:26.838Z","0.1.0-alpha.fb5a5a82":"2018-06-28T21:48:26.838Z","0.1.0-alpha.cc789700":"2018-06-28T21:48:26.838Z","0.1.0-alpha.26bede61":"2018-06-28T21:48:26.838Z","0.1.0-alpha.0b789e5b":"2018-06-28T21:48:26.838Z","0.1.0-alpha.a6c54888":"2018-06-28T21:48:26.838Z","0.1.0-alpha.0cd605b2":"2018-06-28T21:48:26.838Z","0.1.0-alpha.52ab28bf":"2018-06-28T21:48:26.838Z","0.1.0-alpha.a37c6c01":"2018-06-28T21:48:26.838Z","0.1.0-alpha.4a90f139":"2018-06-28T21:48:26.838Z","0.1.0-alpha.32a22b87":"2018-06-28T21:48:26.838Z","0.1.0-alpha.108ef157":"2018-06-28T21:48:26.838Z","0.1.0-alpha.4e643f4b":"2018-06-28T21:48:26.838Z","0.1.0-alpha.e2f9833b":"2018-06-28T21:48:26.838Z","0.1.0-alpha.f3f3cfe3":"2018-06-28T21:48:26.838Z","0.1.0-alpha.f2f3df3e":"2018-06-28T21:48:26.838Z","0.1.0-alpha.7076c2fd":"2018-06-28T21:48:26.838Z","0.1.0-alpha.0e87c67a":"2018-06-28T21:48:26.838Z","0.1.0-alpha.37f3fbd5":"2018-06-28T21:48:26.838Z","0.1.0-alpha.add2120f":"2018-06-28T21:48:26.838Z","0.1.0-alpha.a3d079fb":"2018-06-28T21:48:26.838Z","0.1.0-alpha.b26fffe0":"2018-06-28T21:48:26.838Z","0.1.0-alpha.14ab810e":"2018-06-28T21:48:26.838Z","0.1.0-alpha.3ce28076":"2018-06-28T21:48:26.838Z","0.1.0-alpha.dfdae6dc":"2018-06-28T21:48:26.838Z","0.1.0-alpha.1a813219":"2018-06-28T21:48:26.838Z","0.1.0-alpha.dbd2495d":"2018-06-28T21:48:26.838Z","0.1.0-alpha.ae924cae":"2018-06-28T21:48:26.838Z","0.1.0-alpha.6671e464":"2018-06-28T21:48:26.838Z","0.1.0-alpha.9e823ad8":"2018-06-28T21:48:26.838Z","0.1.0-alpha.747eb2bd":"2018-06-28T21:48:26.838Z","0.1.0-alpha.33f603c2":"2018-06-28T21:48:26.838Z","0.1.0-alpha.085283cd":"2018-06-28T21:48:26.838Z","0.1.0-alpha.adb70e6f":"2018-06-28T21:48:26.838Z","0.1.0-alpha.cff4e6a3":"2018-06-28T21:48:26.838Z","0.1.0-alpha.81593410":"2018-06-28T21:48:26.838Z","0.1.0-alpha.b2f37c6b":"2018-06-28T21:48:26.838Z","0.1.0-alpha.083851c6":"2018-06-28T21:48:26.838Z","0.0.2":"2018-06-28T21:48:26.838Z","0.1.0-alpha.22daadf2":"2018-06-28T21:48:26.838Z","0.1.0-alpha.d5383e82":"2018-06-28T21:48:26.838Z","0.1.0-alpha.1a6fc60f":"2018-06-28T21:48:26.838Z","0.1.0-alpha.a9c921c4":"2018-06-28T21:48:26.838Z","0.1.0-alpha.a81d7f88":"2018-06-28T21:48:26.838Z","0.1.0-alpha.77c2801d":"2018-06-28T21:48:26.838Z","0.1.0-alpha.2d696f00":"2018-06-28T21:48:26.838Z","0.1.0-alpha.49bd8991":"2018-06-28T21:48:26.838Z","0.1.0-alpha.fe129a3f":"2018-06-28T21:48:26.838Z","0.1.0-alpha.90b90f6f":"2018-06-28T21:48:26.838Z","0.1.0-alpha.4514a270":"2018-06-28T21:48:26.838Z","0.1.0-alpha.b9a05240":"2018-06-28T21:48:26.838Z","0.1.0-alpha.e0d7c43e":"2018-06-28T21:48:26.838Z","0.1.0-alpha.65dfe2b2":"2018-06-28T21:48:26.838Z","0.1.0-alpha.2f88b59f":"2018-06-28T21:48:26.838Z","0.1.0-alpha.f2b015db":"2018-06-28T21:48:26.838Z","0.1.0-alpha.a9ef0b46":"2018-06-28T21:48:26.838Z","0.1.0-alpha.2b4c065d":"2018-06-28T21:48:26.838Z","0.1.0-alpha.ccd812f3":"2018-06-28T21:48:26.838Z","0.1.0-alpha.76e88ef6":"2018-06-28T21:48:26.838Z","0.1.0-alpha.1859274a":"2018-06-28T21:48:26.838Z","0.1.0-alpha.52eff884":"2018-06-28T21:48:26.838Z","0.1.0-alpha.0061d26d":"2018-06-28T21:48:26.838Z","0.1.0-alpha.b69c20af":"2018-06-28T21:48:26.838Z","0.1.0-alpha.49290761":"2018-06-28T21:48:26.838Z","0.1.0-alpha.c3aa9bbf":"2018-06-28T21:48:26.838Z","0.1.0-alpha.11f1936c":"2018-06-28T21:48:26.838Z","0.1.0-alpha.691a7949":"2018-06-28T21:48:26.838Z","0.1.0-alpha.5965fd1f":"2018-06-28T21:48:26.838Z","0.1.0-alpha.d9aeb826":"2018-06-28T21:48:26.838Z","0.1.0-alpha.d7cb3304":"2018-06-28T21:48:26.838Z","0.1.0-alpha.fb6bad93":"2018-06-28T21:48:26.838Z","0.1.0-alpha.7341f996":"2018-06-28T21:48:26.838Z","0.1.0-alpha.dbcace2a":"2018-06-28T21:48:26.838Z","0.1.0-alpha.5591742a":"2018-06-28T21:48:26.838Z","0.1.0-alpha.44feef87":"2018-06-28T21:48:26.838Z","0.1.0-alpha.85a8b0f2":"2018-06-28T21:48:26.838Z","0.1.0-alpha.37589271":"2018-06-28T21:48:26.838Z","0.1.0-alpha.a86776c3":"2018-06-28T21:48:26.838Z","0.1.0-alpha.dfd8e715":"2018-06-28T21:48:26.838Z","0.1.0-alpha.cb07cb74":"2018-06-28T21:48:26.838Z","0.1.0-alpha.c1f6481b":"2018-06-28T21:48:26.838Z","0.1.0-alpha.464b9ca3":"2018-06-28T21:48:26.838Z","0.1.0-alpha.4463fb16":"2018-06-28T21:48:26.838Z","0.1.0-alpha.eb33eb9f":"2018-06-28T21:48:26.838Z","0.1.0-alpha.95e57844":"2018-06-28T21:48:26.838Z","0.1.0-alpha.d0d84635":"2018-06-28T21:48:26.838Z","0.1.0-alpha.9041c22e":"2018-06-28T21:48:26.838Z","0.1.0-alpha.59f5b490":"2018-06-28T21:48:26.838Z","0.1.0-alpha.8c5461cb":"2018-06-28T21:48:26.838Z","0.1.0-alpha.67174ede":"2018-06-28T21:48:26.838Z","0.1.0-alpha.aafbf631":"2018-06-28T21:48:26.838Z","0.1.0-alpha.152c6c71":"2018-06-28T21:48:26.838Z","0.1.0-alpha.53734d1d":"2018-06-28T21:48:26.838Z","0.1.0-alpha.a58a1a44":"2018-06-28T21:48:26.838Z","0.1.0-alpha.1a93dcbf":"2018-06-28T21:48:26.838Z","0.1.0-alpha.cff25e05":"2018-06-28T21:48:26.838Z","0.1.0-alpha.82983725":"2018-06-28T21:48:26.838Z","0.1.0-alpha.16945c8e":"2018-06-28T21:48:26.838Z","0.1.0-alpha.12d166b7":"2018-06-28T21:48:26.838Z","0.1.0-alpha.244cf59f":"2018-06-28T21:48:26.838Z","0.1.0-alpha.602e543c":"2018-06-28T21:48:26.838Z","0.1.0-alpha.5aa67733":"2018-06-28T21:48:26.838Z","0.1.0-alpha.12d9416a":"2018-06-28T21:48:26.838Z","0.1.0-alpha.c5bfec1b":"2018-06-28T21:48:26.838Z","0.1.0-alpha.d45fc4cd":"2018-06-28T21:48:26.838Z","0.1.0-alpha.3c80447d":"2018-06-28T21:48:26.838Z","0.1.0-alpha.58b336da":"2018-06-28T21:48:26.838Z","0.1.0-alpha.654f2cca":"2018-06-28T21:48:26.838Z","0.1.0-alpha.f90ed93f":"2018-06-28T21:48:26.838Z","0.1.0-alpha.1f9f3b27":"2018-06-28T21:48:26.838Z","0.1.0-alpha.fe57494f":"2018-06-28T21:48:26.838Z","0.1.0-alpha.4c0e7326":"2018-06-28T21:48:26.838Z","0.1.0-alpha.0642a2e3":"2018-06-28T21:48:26.838Z","0.1.0-alpha.933b1809":"2018-06-28T21:48:26.838Z","0.1.0-alpha.8cff8b12":"2018-06-28T21:48:26.838Z","0.1.0-alpha.49552a19":"2018-06-28T21:48:26.838Z","0.1.0-alpha.46087bf3":"2018-06-28T21:48:26.838Z","0.1.0-alpha.a6709d1e":"2018-06-28T21:48:26.838Z","0.1.0-alpha.302fc485":"2018-06-28T21:48:26.838Z","0.1.0-alpha.c6f7dd36":"2018-06-28T21:48:26.838Z","0.1.0-alpha.83585016":"2018-06-28T21:48:26.838Z","0.1.0-alpha.083a39a5":"2018-06-28T21:48:26.838Z","0.1.0-alpha.9a651206":"2018-06-28T21:48:26.838Z","0.1.0-alpha.9ef760e5":"2018-06-28T21:48:26.838Z","0.1.0-alpha.8204c6aa":"2018-06-29T23:33:24.846Z","0.1.0":"2018-06-29T23:39:58.607Z","0.2.0-alpha.039a84f6":"2018-06-30T00:01:02.555Z","0.2.0-alpha.01da8a20":"2018-06-30T14:19:23.412Z","0.2.0-alpha.0df49d9f":"2018-06-30T14:22:28.584Z","0.2.0-alpha.eec415ab":"2018-07-02T12:49:07.775Z","0.2.0-alpha.b606797b":"2018-07-02T16:30:10.403Z","0.2.0-alpha.fad0a274":"2018-07-02T17:32:09.667Z","0.2.0-alpha.9a00966c":"2018-07-02T17:45:42.783Z","0.2.0-alpha.159c4a6b":"2018-07-02T18:22:47.384Z","0.2.0-alpha.331c05e7":"2018-07-02T18:36:27.544Z","0.2.0-alpha.1c6ddbdd":"2018-07-02T20:47:18.400Z","0.2.0-alpha.02b91410":"2018-07-02T21:33:32.299Z","0.2.0-alpha.e8c61611":"2018-07-02T22:35:13.590Z","0.2.0-alpha.6db4b83c":"2018-07-03T14:27:24.995Z","0.2.0-alpha.bcdbbbc9":"2018-07-03T16:02:24.773Z","0.2.0-alpha.9b3f5f43":"2018-07-03T19:27:17.215Z","0.2.0-alpha.d53bf42b":"2018-07-05T21:48:05.114Z","0.2.0-alpha.0dbd965c":"2018-07-09T17:23:06.223Z","0.2.0-alpha.8d2fa0d5":"2018-07-09T19:53:03.716Z","0.2.0-alpha.f546f315":"2018-07-09T20:33:49.455Z","0.2.0-alpha.cff15a98":"2018-07-10T15:45:54.202Z","0.2.0-alpha.33643ce7":"2018-07-10T17:20:05.956Z","0.2.0-alpha.0880a1b5":"2018-07-10T17:48:18.428Z","0.2.0-alpha.2105647":"2018-07-11T14:30:14.813Z","0.2.0-alpha.a834caa6":"2018-07-11T15:58:01.154Z","0.2.0-alpha.808ad2a2":"2018-07-11T19:04:25.103Z","0.2.0-alpha.2383e1ac":"2018-07-11T22:09:33.281Z","0.2.0-alpha.a0872f53":"2018-07-12T14:15:26.120Z","0.2.0-alpha.b2a2bfc3":"2018-07-12T16:34:03.531Z","0.2.0-alpha.bb156bd9":"2018-07-12T17:06:11.943Z","0.2.0-alpha.d6236ad2":"2018-07-12T18:04:45.636Z","0.2.0-alpha.bbd56b44":"2018-07-17T17:03:59.040Z","0.2.0-alpha.74aadba4":"2018-07-17T17:48:27.225Z","0.2.0-alpha.64333850":"2018-07-18T20:14:59.093Z","0.2.0-alpha.a6ee192f":"2018-07-18T21:07:19.734Z","0.2.0-alpha.bc7219c1":"2018-07-18T22:28:22.683Z","0.2.0-alpha.83aba47e":"2018-07-19T21:41:00.868Z","0.2.0-alpha.71820862":"2018-07-19T22:28:24.579Z","0.2.0-alpha.bd11590d":"2018-07-20T14:23:31.386Z","0.2.0-alpha.943fe174":"2018-07-20T17:16:11.893Z","0.2.0-alpha.3f838cc9":"2018-07-20T20:11:19.621Z","0.2.0-alpha.7f49f4e5":"2018-07-20T20:55:40.708Z","0.2.0-alpha.3971d89b":"2018-07-24T18:03:01.116Z","0.2.0-alpha.8195ad25":"2018-07-24T18:10:38.748Z","0.2.0-alpha.a677e08f":"2018-07-24T19:24:46.643Z","0.2.0-alpha.d476994f":"2018-07-24T19:51:23.706Z","0.2.0-alpha.edb71636":"2018-07-25T17:53:38.292Z","0.2.0-alpha.288096b9":"2018-07-25T20:07:02.650Z","0.2.0-alpha.0874d73b":"2018-07-27T15:02:39.154Z","0.2.0-alpha.a84e12cd":"2018-07-27T15:50:14.619Z","0.2.0-alpha.b4a85e8a":"2018-07-27T17:49:04.281Z","0.2.0-alpha.cd1cfac4":"2018-07-27T18:13:36.834Z","0.2.0-alpha.46afc872":"2018-07-27T18:54:27.579Z","0.2.0-alpha.d9a56009":"2018-07-27T19:17:29.916Z","0.2.0-alpha.50d491f0":"2018-07-27T19:42:41.465Z","0.2.0-alpha.5a439850":"2018-07-27T20:48:03.047Z","0.2.0-alpha.44a6626d":"2018-07-30T18:44:02.451Z","0.2.0-alpha.72c610d6":"2018-07-31T18:32:56.576Z","0.2.0-alpha.700551d9":"2018-07-31T18:42:40.540Z","0.2.0-alpha.b64e30dd":"2018-07-31T20:31:32.978Z","0.2.0-alpha.0b0dd155":"2018-08-01T15:23:08.173Z","0.2.0-alpha.c0ceb59d":"2018-08-01T16:54:18.680Z","0.2.0-alpha.442ed60e":"2018-08-01T17:29:36.927Z","0.2.0-alpha.3d308725":"2018-08-01T18:14:05.681Z","0.2.0-alpha.a2323718":"2018-08-01T18:54:38.105Z","0.2.0-alpha.f33a6b0c":"2018-08-01T19:35:07.252Z","0.2.0-alpha.f483bd88":"2018-08-01T20:30:16.647Z","0.2.0-alpha.a63df2ca":"2018-08-01T20:50:58.378Z","0.2.0-alpha.3a450a5c":"2018-08-02T19:34:49.547Z","0.2.0-alpha.0fc7e99d":"2018-08-03T19:53:56.149Z","0.2.0-alpha.92e88d6d":"2018-08-03T20:31:42.862Z","0.2.0-alpha.3c023cbf":"2018-08-03T20:54:20.531Z","0.2.0-alpha.810c5dc1":"2018-08-03T21:56:27.602Z","0.2.0-alpha.fed9b250":"2018-08-06T15:49:07.287Z","0.2.0-alpha.409f7e9e":"2018-08-06T16:05:46.749Z","0.2.0-alpha.7ba6a941":"2018-08-06T17:01:50.816Z","0.2.0-alpha.53dc2262":"2018-08-06T17:32:26.303Z","0.2.0-alpha.5f599f3c":"2018-08-06T19:53:44.905Z","0.2.0-alpha.709ef378":"2018-08-06T20:56:00.845Z","0.2.0-alpha.61e2d50f":"2018-08-07T20:49:03.764Z","0.2.0-alpha.49d305a0":"2018-08-09T15:07:16.416Z","0.2.0-alpha.21c2f4f6":"2018-08-09T19:42:23.152Z","0.2.0-alpha.23707849":"2018-08-10T16:22:54.599Z","0.2.0-alpha.1db13cba":"2018-08-10T18:56:35.328Z","0.2.0-alpha.987931a8":"2018-08-14T14:46:49.740Z","0.2.0-alpha.83b6f01c":"2018-08-14T14:56:30.128Z","0.2.0-alpha.79fd2218":"2018-08-14T16:25:57.461Z","0.2.0-alpha.230cbfe8":"2018-08-14T18:05:55.245Z","0.2.0-alpha.8ce3cc7a":"2018-08-14T18:21:17.251Z","0.2.0-alpha.0d466f67":"2018-08-14T21:35:32.462Z","0.2.0-alpha.60583fda":"2018-08-15T14:15:33.137Z","0.2.0-alpha.587df802":"2018-08-15T17:56:19.180Z","0.2.0-alpha.26a8dc9d":"2018-08-15T18:28:12.153Z","0.2.0-alpha.14a5c57f":"2018-08-15T19:18:40.751Z","0.2.0-alpha.a7e5bceb":"2018-08-15T20:12:19.257Z","0.2.0-alpha.f4cb1884":"2018-08-15T22:12:31.395Z","0.2.0-alpha.e2cc0f95":"2018-08-16T15:50:36.600Z","0.2.0-alpha.d2eafc2e":"2018-08-16T16:12:06.190Z","0.2.0-alpha.0f20dbf0":"2018-08-17T15:43:12.371Z","0.2.0-alpha.68b84b56":"2018-08-22T19:04:08.650Z","0.2.0-alpha.20a2b2ed":"2018-08-27T15:36:54.294Z","0.2.0-alpha.864b0bb8":"2018-08-28T17:05:50.118Z","0.2.0-alpha.a564fd22":"2018-08-29T18:30:50.083Z","0.2.0-alpha.bc4a19f7":"2018-08-30T17:40:41.023Z","0.2.0-alpha.0bb130ca":"2018-08-30T18:09:36.334Z","0.2.0-alpha.837469bb":"2018-09-06T21:33:13.884Z","0.2.0-alpha.be87dd01":"2018-09-07T15:35:13.253Z","0.2.0-alpha.3f287a06":"2018-09-07T17:03:17.376Z","0.2.0-alpha.1adff63a":"2018-09-07T21:49:58.695Z","0.2.0-alpha.3bf49fbd":"2018-09-10T15:49:43.178Z","0.2.0-alpha.7afadfed":"2018-09-11T14:47:25.698Z","0.2.0-alpha.41e794fd":"2018-09-11T19:54:13.442Z","0.2.0-alpha.bbadd96c":"2018-09-11T21:07:55.286Z","0.2.0-alpha.47bc20f7":"2018-09-12T16:15:32.968Z","0.2.0-alpha.8cc83689":"2018-09-13T15:10:55.391Z","0.2.0-alpha.da0f2d11":"2018-09-18T18:47:54.486Z","0.2.0-alpha.f2461fef":"2018-09-25T19:43:18.942Z","0.2.0-alpha.cb1604dd":"2018-09-26T15:56:44.757Z","0.2.0-alpha.e326bceb":"2018-09-26T16:30:42.532Z","0.2.0-alpha.8e9e5f73":"2018-09-26T19:37:17.156Z","0.2.0-alpha.b5f6b79d":"2018-09-27T19:35:24.825Z","0.2.0-alpha.9426f892":"2018-10-01T19:45:22.724Z","0.2.0-alpha.adccb560":"2018-10-01T22:00:45.299Z","0.2.0-alpha.c754ad35":"2018-10-03T18:47:41.644Z","0.2.0-alpha.c7903ac2":"2018-10-04T21:43:16.737Z","0.2.0-alpha.a96082b3":"2018-10-04T22:22:28.581Z","0.2.0-alpha.68357379":"2018-10-04T23:03:02.300Z","0.2.0-alpha.27bb3bd8":"2018-10-05T00:08:05.778Z","0.2.0-alpha.414d45f2":"2018-10-05T00:27:45.514Z","0.2.0-alpha.95dd219d":"2018-10-05T01:13:19.673Z","0.2.0-alpha.74b8b7f4":"2018-10-05T02:21:39.906Z","0.2.0-alpha.03d713be":"2018-10-05T02:56:11.433Z","0.2.0-alpha.74e71f8c":"2018-10-05T15:10:41.399Z","2.0.0":"2018-10-16T18:05:16.351Z","2.0.1-alpha.7":"2018-11-02T22:14:41.597Z","2.0.1-alpha.9":"2018-11-06T17:18:27.155Z","2.0.1-alpha.10":"2018-11-07T22:37:26.364Z","2.0.1-alpha.11":"2018-11-08T15:50:00.872Z","2.0.1-alpha.12":"2018-11-16T19:15:03.314Z","2.0.1-alpha.13":"2018-11-21T15:56:05.841Z","2.0.1-alpha.14":"2018-11-29T22:43:46.201Z","2.0.1-alpha.15":"2018-11-29T23:11:06.143Z","2.0.1-alpha.16":"2018-11-30T03:39:35.001Z","2.0.1-alpha.17":"2018-12-04T18:47:36.711Z","2.0.1-alpha.18":"2018-12-05T20:40:55.130Z","2.0.1-alpha.22":"2018-12-12T16:17:42.730Z","2.0.1-alpha.23":"2018-12-12T21:07:10.862Z","2.0.1-alpha.26":"2019-01-03T19:24:58.823Z","2.0.1-alpha.27":"2019-01-04T20:09:06.376Z","2.0.1-alpha.28":"2019-01-10T20:57:39.427Z","2.0.1-alpha.30":"2019-01-14T20:16:57.073Z","2.0.1-alpha.31":"2019-01-16T18:30:10.167Z","2.0.1-alpha.32":"2019-01-17T16:21:53.958Z","2.0.1-alpha.33":"2019-01-17T18:34:38.482Z","2.0.1-alpha.34":"2019-01-18T16:35:13.376Z","2.0.1-alpha.35":"2019-01-28T17:11:58.971Z","2.0.1-alpha.36":"2019-01-28T21:30:17.224Z","2.0.1-alpha.37":"2019-02-01T16:54:16.618Z","2.0.1-alpha.38":"2019-02-01T21:51:24.296Z","2.0.1-alpha.39":"2019-02-07T19:19:06.243Z","2.0.1-alpha.40":"2019-02-07T23:08:24.599Z","3.0.1-alpha.1":"2019-02-11T20:00:57.631Z","2.0.1-alpha.41":"2019-02-11T21:45:17.057Z","2.0.1-alpha.42":"2019-02-11T21:55:14.871Z","2.0.1-alpha.44":"2019-02-11T22:17:15.029Z","2.0.1-alpha.45":"2019-02-11T23:34:08.459Z","2.0.1-alpha.46":"2019-02-12T15:51:23.654Z","3.0.1-alpha.13":"2019-02-20T21:52:20.306Z","3.0.1-alpha.14":"2019-02-21T19:47:37.816Z","3.0.0":"2019-02-22T16:39:12.910Z","3.0.1-alpha.2":"2019-02-27T15:50:37.288Z","3.0.1-alpha.3":"2019-02-27T16:09:19.894Z","3.0.1-alpha.4":"2019-02-27T16:30:20.827Z","3.0.1-alpha.6":"2019-03-03T02:18:09.766Z","3.0.1-alpha.7":"2019-03-04T19:28:06.523Z","3.0.1-alpha.16":"2019-03-07T16:54:36.960Z","3.0.1-alpha.17":"2019-03-07T22:55:04.624Z","3.0.1-alpha.18":"2019-03-12T20:48:33.253Z","3.0.1-alpha.19":"2019-03-15T20:27:25.685Z","3.0.1-alpha.20":"2019-03-18T15:47:01.157Z","3.0.1-alpha.22":"2019-03-18T19:47:54.357Z","3.0.1-alpha.27":"2019-03-21T18:02:32.190Z","3.0.1-alpha.28":"2019-03-21T19:45:39.750Z","3.0.1-alpha.32":"2019-03-25T21:42:18.640Z","3.0.1-alpha.34":"2019-03-26T16:34:49.268Z","3.0.1-alpha.35":"2019-03-26T17:13:48.447Z","3.0.1-alpha.37":"2019-03-26T18:09:07.167Z","3.0.1-alpha.38":"2019-03-26T19:50:32.463Z","3.0.1-alpha.39":"2019-03-26T20:32:27.836Z","3.0.1-alpha.40":"2019-03-26T22:40:54.776Z","3.0.1-alpha.42":"2019-03-27T15:44:16.361Z","3.0.1-alpha.43":"2019-03-28T18:40:54.524Z","3.0.1-alpha.44":"2019-03-28T22:37:38.196Z","3.0.1-alpha.45":"2019-03-29T02:59:17.999Z","3.0.1-alpha.46":"2019-03-29T03:26:01.620Z","3.0.1-alpha.70":"2019-04-04T18:10:47.251Z","3.0.1-alpha.72":"2019-04-10T20:57:14.276Z","3.0.1-alpha.73":"2019-04-11T18:13:52.980Z","3.0.1-alpha.74":"2019-04-11T20:09:54.987Z","3.0.1-alpha.75":"2019-04-16T17:15:59.471Z","3.0.1-alpha.76":"2019-04-18T20:15:40.036Z","3.0.1-alpha.77":"2019-04-18T21:39:15.492Z","3.0.1-alpha.78":"2019-04-19T18:28:13.464Z","3.0.1-alpha.79":"2019-04-22T20:24:44.093Z","3.0.1-alpha.80":"2019-04-23T15:27:27.843Z","3.0.1-alpha.81":"2019-04-26T14:32:02.487Z","3.0.1-alpha.82":"2019-04-29T14:35:49.741Z","3.0.1-alpha.83":"2019-04-29T18:28:52.667Z","3.0.1-alpha.84":"2019-04-29T19:10:35.861Z","3.0.1-alpha.85":"2019-04-29T20:22:26.134Z","3.0.1-alpha.88":"2019-04-30T15:25:47.794Z","3.0.1-alpha.89":"2019-04-30T16:13:58.011Z","3.0.1-alpha.90":"2019-04-30T18:08:09.379Z","3.0.1-alpha.91":"2019-04-30T18:35:35.520Z","3.0.1-alpha.92":"2019-04-30T19:19:55.524Z","3.0.1-alpha.93":"2019-05-14T14:48:41.031Z","3.0.1-alpha.94":"2019-05-20T18:36:11.279Z","3.0.1-alpha.95":"2019-05-28T14:54:59.785Z","3.0.1-alpha.96":"2019-05-29T14:30:26.060Z","3.0.1-alpha.102":"2019-05-29T21:43:08.701Z","3.0.1-alpha.103":"2019-05-31T20:14:45.026Z","3.1.0":"2019-06-03T15:27:41.618Z","3.1.1-alpha.0":"2019-06-03T15:52:09.192Z","3.1.1":"2019-06-04T17:55:09.613Z","3.2.0":"2019-07-03T15:58:09.639Z","4.0.0-alpha.0":"2019-07-08T21:24:15.049Z","4.0.0-alpha.1":"2019-07-09T19:22:06.121Z","4.0.0-alpha.2":"2019-07-10T17:20:36.727Z","3.2.1":"2019-07-11T20:58:28.981Z","4.0.0-alpha.3":"2019-07-16T18:01:51.583Z","4.0.0":"2019-07-16T21:07:21.079Z","3.2.2-alpha.10":"2019-07-17T14:36:46.075Z","4.1.0":"2019-07-24T17:58:32.438Z","3.2.2-alpha.15":"2019-07-24T18:21:43.884Z","3.2.2-alpha.18":"2019-07-25T18:53:32.882Z","3.3.0":"2019-07-30T21:33:15.899Z","3.2.2-alpha.30":"2019-08-05T18:41:15.765Z","5.0.0":"2019-08-06T17:14:00.191Z","5.0.1-alpha.0":"2019-08-06T17:43:10.928Z","3.4.0":"2019-08-07T14:57:50.987Z","3.5.0":"2019-08-07T19:38:17.728Z","5.1.0":"2019-08-14T15:43:17.634Z","5.0.1-alpha.9":"2019-08-14T17:22:12.736Z","5.1.1":"2019-08-19T19:29:58.718Z","5.0.1-alpha.12":"2019-08-19T20:32:51.029Z","5.2.0":"2019-08-21T19:57:37.183Z","5.0.1-alpha.13":"2019-08-21T21:25:11.275Z","5.3.0":"2019-08-23T17:27:44.051Z","5.0.1-alpha.14":"2019-08-23T18:38:28.777Z","6.0.0-alpha.13":"2019-08-29T18:31:40.441Z","6.0.0":"2019-09-04T21:17:19.397Z","5.0.1-alpha.15":"2019-09-05T15:43:02.446Z","6.0.0-alpha.15":"2019-09-05T17:51:39.005Z","6.1.0":"2019-09-10T15:44:21.476Z","6.1.3":"2019-09-12T23:09:30.234Z","6.0.0-alpha.16":"2019-09-16T20:24:19.180Z","6.1.4":"2019-09-17T16:15:30.946Z","6.2.0":"2019-09-19T14:27:14.628Z","6.3.0":"2019-09-23T18:50:55.662Z","3.5.1":"2019-09-24T17:21:59.643Z","3.6.0":"2019-09-26T19:45:17.723Z","7.0.0":"2019-09-27T18:08:38.806Z","6.0.0-rnn2.17":"2019-10-01T18:25:29.717Z","7.1.0":"2019-10-02T19:04:07.206Z","8.0.0-rnn2.0":"2019-10-02T20:43:52.099Z","8.0.1-rnn2.0":"2019-10-02T22:17:49.706Z","8.0.2-rnn2.0":"2019-10-03T19:05:50.006Z","7.1.1":"2019-10-04T16:49:25.085Z","7.2.0":"2019-10-07T20:22:15.312Z","7.3.0":"2019-10-08T18:25:47.537Z","7.4.0":"2019-10-08T21:48:52.687Z","7.4.1":"2019-10-09T19:22:50.552Z","8.1.0-rnn2.0":"2019-10-09T21:48:28.875Z","8.1.1-rnn2.0":"2019-10-11T19:31:51.536Z","8.1.3-rnn2.0":"2019-10-11T22:47:04.535Z","8.2.0-rnn2.0":"2019-10-17T17:11:21.699Z","7.4.2":"2019-10-29T19:56:35.485Z","7.4.3":"2019-10-30T21:27:32.997Z","7.5.4":"2019-11-08T15:29:54.210Z","7.6.0":"2019-11-14T22:12:24.236Z","7.7.0":"2019-11-20T20:20:02.564Z","7.7.1":"2019-11-20T23:01:08.960Z","8.4.0-rnn2.0":"2019-12-13T23:08:39.753Z","7.8.0":"2019-12-18T17:47:55.381Z","8.5.0-rnn2.0":"2019-12-18T18:04:18.918Z","7.9.0":"2020-01-06T18:32:47.744Z","7.10.0":"2020-01-14T15:48:22.715Z","8.0.0":"2020-01-15T19:45:50.784Z","8.1.0":"2020-01-24T22:13:32.946Z","8.2.0":"2020-02-10T19:47:56.557Z","8.3.0":"2020-02-12T19:39:44.036Z","7.11.0":"2020-03-09T17:39:12.533Z","8.4.0":"2020-03-09T18:26:14.207Z","9.1.0-rnn2.0":"2020-03-10T17:33:47.286Z","8.5.0":"2020-03-19T16:18:08.004Z","9.2.0-rnn2.0":"2020-03-20T18:12:14.052Z","8.6.0":"2020-03-23T20:12:04.634Z","8.6.1":"2020-03-23T22:20:09.468Z","9.3.0-rnn2.0":"2020-03-24T15:58:43.309Z","9.4.0-rnn2.0":"2020-03-24T20:45:43.258Z","8.7.0":"2020-03-26T20:12:18.046Z","9.5.0-rnn2.0":"2020-03-27T18:31:51.488Z","9.0.0":"2020-03-30T20:40:29.698Z","9.0.1":"2020-04-03T15:47:27.170Z","8.8.0":"2020-04-09T16:22:12.705Z","9.1.0":"2020-04-15T20:38:46.837Z","8.8.1":"2020-04-24T18:27:30.516Z","9.6.0-rnn2.0":"2020-05-05T19:17:24.750Z","9.1.1-alpha.32":"2020-05-07T20:22:25.190Z","9.2.0":"2020-05-08T16:53:46.035Z","9.2.1":"2020-05-08T17:47:37.776Z","9.3.0":"2020-05-14T17:49:40.775Z","9.4.0":"2020-06-02T14:58:45.467Z","9.5.0":"2020-06-04T17:06:53.334Z","9.6.0":"2020-07-09T14:59:11.782Z","9.6.1":"2020-07-16T20:11:08.425Z","9.6.2":"2020-07-28T16:56:51.368Z","10.0.0-alpha.0":"2020-08-06T17:40:57.693Z","10.0.0-alpha.1":"2020-08-13T19:18:17.340Z","9.6.3":"2020-08-25T21:50:21.743Z","10.0.0-alpha.2":"2020-09-03T17:58:44.150Z","9.6.4":"2020-09-09T16:37:07.894Z","10.0.0-alpha.3":"2020-09-23T15:54:52.360Z","10.0.0-alpha.4":"2020-09-24T18:11:54.971Z","10.0.0-alpha.5":"2020-09-25T19:05:35.410Z","10.0.0-alpha.6":"2020-10-06T14:52:54.832Z","10.0.0-alpha.7":"2020-10-06T20:41:59.805Z","10.0.0-alpha.8":"2020-10-07T15:45:06.228Z","10.0.0-alpha.9":"2020-10-07T18:46:59.281Z","10.0.0":"2020-10-13T20:36:00.630Z","10.1.0":"2020-10-21T15:28:32.476Z","10.2.0-alpha.0":"2020-10-28T15:45:55.853Z","10.2.0":"2020-10-28T16:11:05.677Z","10.2.1":"2020-10-29T15:24:58.418Z","10.2.2":"2020-10-29T19:28:07.747Z","10.3.0":"2020-11-06T21:37:46.019Z","10.4.0":"2020-11-16T18:52:45.344Z","10.5.0-alpha.0":"2020-11-30T16:04:58.348Z","10.5.0-alpha.1":"2020-11-30T17:37:56.379Z","10.5.0":"2020-12-04T16:28:01.824Z","10.5.1":"2020-12-07T14:59:20.746Z","10.6.0-alpha.0":"2020-12-08T21:26:50.651Z","10.6.0-alpha.1":"2020-12-09T18:43:30.097Z","10.6.0-alpha.2":"2020-12-10T19:44:04.407Z","10.6.0-alpha.3":"2020-12-10T22:37:04.270Z","10.6.0":"2020-12-14T22:24:00.765Z","10.6.1":"2020-12-16T18:20:51.602Z","10.7.0":"2020-12-16T21:30:47.242Z","10.2.3":"2020-12-16T22:53:40.753Z","10.8.0-alpha.0":"2020-12-17T18:22:49.760Z","10.7.1":"2021-01-05T17:59:45.891Z","11.0.0-alpha.0":"2021-01-13T16:48:36.632Z","10.8.0":"2021-01-22T16:35:57.194Z","11.0.0-alpha.1":"2021-01-25T17:56:27.140Z","11.0.0-alpha.2":"2021-01-27T21:06:02.603Z","11.0.0-alpha.3":"2021-02-02T16:04:45.277Z","11.0.0-alpha.4":"2021-02-02T21:06:12.371Z","11.0.0-alpha.5":"2021-02-04T16:19:25.690Z","10.9.0":"2021-02-04T18:36:19.757Z","10.10.0-alpha.0":"2021-02-10T15:49:26.237Z","11.0.0-alpha.6":"2021-02-16T18:50:09.405Z","11.0.0-alpha.7":"2021-02-16T21:15:17.823Z","11.0.0-alpha.8":"2021-02-16T22:53:36.062Z","10.10.0-alpha.1":"2021-02-17T22:17:46.297Z","11.0.0-alpha.9":"2021-02-25T22:12:27.212Z","10.10.0":"2021-03-02T16:02:16.589Z","10.11.0":"2021-03-05T17:25:19.602Z","11.0.0-alpha.10":"2021-03-11T22:14:36.240Z","11.0.0-alpha.11":"2021-03-11T22:29:42.759Z","11.0.0-alpha.12":"2021-03-12T03:08:28.850Z","10.11.1":"2021-03-16T15:56:58.674Z","10.11.2":"2021-03-17T15:42:26.300Z","11.0.0-alpha.13":"2021-03-19T18:47:11.328Z","11.0.0-alpha.14":"2021-03-22T21:05:54.070Z","11.0.0-alpha.15":"2021-03-25T14:40:43.610Z","11.0.0-alpha.16":"2021-04-05T20:28:13.133Z","11.0.0-alpha.17":"2021-04-12T17:22:19.754Z","10.12.0":"2021-04-14T16:19:39.292Z","11.0.0-alpha.18":"2021-04-16T15:19:09.000Z","11.0.0-alpha.19":"2021-04-16T17:23:34.197Z","11.0.0-alpha.20":"2021-04-22T16:39:24.908Z","11.0.0-alpha.21":"2021-04-27T14:51:19.449Z","11.0.0-alpha.22":"2021-04-29T19:24:13.421Z","11.0.0-alpha.23":"2021-05-05T16:39:35.806Z","11.0.0-alpha.24":"2021-05-06T21:08:54.622Z","11.0.0-alpha.25":"2021-05-12T15:34:22.086Z","11.0.0-alpha.26":"2021-05-13T20:35:00.036Z","11.0.0-alpha.27":"2021-05-18T17:51:43.444Z","11.0.0-alpha.28":"2021-05-26T14:39:19.115Z","11.0.0-alpha.29":"2021-05-26T20:55:29.694Z","11.0.0-alpha.30":"2021-06-03T23:04:07.210Z","11.0.0-alpha.31":"2021-06-08T15:03:13.129Z","11.0.0-alpha.32":"2021-06-11T16:49:04.701Z","10.13.0":"2021-06-17T14:54:07.456Z","11.0.0-alpha.33":"2021-06-23T15:32:22.376Z","11.0.0-alpha.34":"2021-06-23T18:41:29.896Z","11.0.0-alpha.35":"2021-06-24T19:02:32.584Z","11.0.0-alpha.36":"2021-06-25T15:06:20.742Z","11.0.0-alpha.37":"2021-06-28T22:11:24.451Z","11.0.0-alpha.42":"2021-07-01T21:58:29.196Z","11.0.0-alpha.43":"2021-07-01T22:03:59.152Z","11.0.0-alpha.44":"2021-07-01T22:09:36.896Z","11.0.0-alpha.45":"2021-07-01T22:14:50.539Z","11.0.0-alpha.46":"2021-07-01T22:20:11.522Z","11.0.0-alpha.47":"2021-07-01T22:25:18.180Z","11.0.0-alpha.48":"2021-07-01T22:30:59.391Z","11.0.0-alpha.49":"2021-07-01T22:36:34.713Z","11.0.0-alpha.50":"2021-07-01T22:41:52.796Z","11.0.0-alpha.51":"2021-07-01T22:47:45.298Z","11.0.0-alpha.52":"2021-07-01T22:52:40.056Z","11.0.0-alpha.53":"2021-07-01T22:58:42.934Z","11.0.0-alpha.54":"2021-07-01T23:03:46.673Z","11.0.0-alpha.55":"2021-07-01T23:09:12.508Z","11.0.0-alpha.56":"2021-07-01T23:14:43.966Z","11.0.0-alpha.57":"2021-07-01T23:19:59.230Z","11.0.0-alpha.58":"2021-07-01T23:25:07.698Z","11.0.0-alpha.59":"2021-07-01T23:30:41.112Z","11.0.0-alpha.60":"2021-07-01T23:35:57.714Z","11.0.0-alpha.61":"2021-07-06T18:50:05.445Z","11.0.1-alpha.0":"2021-07-06T19:10:48.468Z","11.0.1-alpha.1":"2021-07-07T19:11:31.596Z","11.0.1-alpha.2":"2021-07-07T20:18:39.111Z","11.0.1-alpha.3":"2021-07-09T14:28:46.755Z","11.0.1-alpha.4":"2021-07-09T20:12:58.455Z","11.0.1-alpha.5":"2021-07-12T15:35:11.746Z","11.0.1-alpha.6":"2021-07-13T20:35:53.803Z","11.0.1-alpha.7":"2021-07-20T19:02:36.833Z","11.0.1-alpha.8":"2021-07-21T18:27:57.717Z","11.0.1-alpha.9":"2021-07-27T15:28:53.835Z","10.14.0":"2021-07-27T22:00:34.979Z","11.0.1-alpha.10":"2021-08-03T20:49:40.347Z","11.0.1-alpha.11":"2021-08-09T17:26:17.071Z","11.0.1-alpha.12":"2021-08-16T21:37:28.984Z","11.0.1-alpha.13":"2021-08-19T17:09:50.184Z","11.0.1-alpha.14":"2021-08-25T19:09:17.712Z","11.0.1-alpha.15":"2021-08-27T14:45:13.437Z","11.0.1-alpha.16":"2021-09-01T19:05:51.049Z","11.0.1-alpha.17":"2021-09-08T18:43:01.794Z","11.0.0":"2021-09-08T22:00:30.382Z","11.1.0":"2021-09-27T17:59:40.735Z","10.15.0":"2021-09-30T21:15:11.563Z","11.2.0":"2021-10-27T19:19:05.075Z","11.3.0":"2021-10-29T19:48:41.698Z","11.3.1":"2021-11-03T15:14:28.344Z","11.4.0":"2021-11-05T15:47:15.630Z","10.16.0":"2021-11-05T21:46:47.319Z","11.5.0":"2021-11-09T02:23:33.662Z","10.17.0":"2021-11-09T03:29:02.152Z","11.6.0":"2021-11-10T22:41:55.567Z","11.7.0":"2021-11-17T16:37:51.531Z","11.8.0":"2021-11-17T22:06:56.565Z","10.17.1":"2021-11-18T19:31:20.190Z","11.8.1":"2021-11-19T17:36:12.868Z","11.9.0":"2021-12-02T18:46:36.799Z","11.9.1":"2021-12-06T16:23:32.757Z","10.17.2":"2021-12-07T22:19:30.587Z","11.10.0":"2021-12-08T16:43:13.167Z","10.18.0":"2022-01-04T20:49:17.996Z","11.18.0":"2022-01-13T18:45:35.340Z","11.18.1":"2022-01-13T19:48:50.644Z","11.19.0":"2022-01-18T18:19:32.142Z","11.20.0":"2022-01-19T22:55:39.116Z","11.20.1":"2022-01-20T00:04:51.449Z","11.20.2":"2022-01-20T00:43:35.517Z","11.21.0":"2022-01-21T22:37:50.339Z","11.22.0":"2022-01-27T21:56:28.038Z","11.23.0":"2022-01-31T17:33:04.070Z","11.24.0":"2022-02-05T00:25:37.727Z","11.25.0":"2022-02-08T16:16:39.220Z","11.25.1":"2022-02-09T22:00:42.987Z","11.26.0":"2022-02-10T21:04:02.881Z","11.26.1":"2022-02-11T19:49:13.144Z","11.27.0":"2022-02-14T23:26:36.671Z","11.28.0":"2022-02-15T22:39:25.635Z","11.29.0":"2022-02-16T22:22:06.430Z","11.30.0":"2022-02-17T22:02:33.125Z","11.31.0":"2022-02-18T22:09:08.198Z","11.32.0":"2022-02-22T19:12:42.117Z","11.33.0":"2022-02-24T00:08:17.125Z","11.34.0":"2022-02-25T04:27:47.953Z","11.35.0":"2022-02-25T23:00:23.706Z","11.36.0":"2022-03-03T00:14:07.605Z","11.37.0":"2022-03-03T22:36:06.954Z","11.38.0":"2022-03-07T23:08:40.619Z","11.39.0":"2022-03-08T23:28:47.056Z","11.40.0":"2022-03-10T22:38:03.802Z","11.41.0":"2022-03-17T21:48:10.813Z","11.42.0":"2022-03-21T20:50:10.467Z","11.43.0":"2022-03-22T20:57:08.640Z","11.44.0":"2022-03-23T20:58:08.416Z","11.45.0":"2022-03-24T21:02:39.056Z","11.46.0":"2022-03-28T21:56:54.004Z","11.47.0":"2022-03-31T17:44:42.968Z","11.48.0":"2022-04-05T22:34:49.337Z","11.49.0":"2022-04-08T21:19:53.831Z","11.50.0":"2022-04-11T23:16:51.630Z","11.51.0":"2022-04-13T23:36:49.270Z","11.52.0":"2022-04-18T20:48:41.836Z","11.53.0":"2022-04-20T00:16:19.090Z","11.54.0":"2022-04-27T18:08:35.191Z","11.55.0":"2022-04-29T16:20:40.325Z","11.56.0":"2022-05-05T19:48:40.518Z","11.57.0":"2022-05-06T21:12:12.737Z","11.58.0":"2022-05-11T15:21:51.596Z","11.59.0":"2022-05-12T20:10:51.969Z","11.60.0":"2022-05-12T21:02:37.601Z","11.61.0":"2022-05-17T15:01:00.654Z","11.62.0":"2022-05-20T16:09:50.255Z","11.63.0":"2022-05-25T18:19:43.329Z","11.64.0-alpha.0":"2022-06-27T16:42:52.724Z","11.64.0":"2022-06-27T22:02:15.183Z","11.65.0":"2022-06-30T21:27:18.658Z","11.66.0-alpha.0":"2022-07-15T20:39:13.858Z","11.66.0":"2022-08-01T17:33:10.490Z","11.67.0":"2022-08-04T21:25:00.078Z","11.68.0":"2022-08-19T19:21:12.698Z","11.69.0":"2022-08-22T19:59:10.490Z","11.71.0":"2022-09-15T21:56:00.791Z","11.71.1":"2022-09-19T22:19:16.458Z","11.70.0":"2022-09-20T17:56:17.183Z","11.71.2":"2022-09-20T22:46:13.389Z","11.72.0":"2022-10-12T19:22:46.602Z","10.19.0":"2022-10-19T15:33:50.368Z","11.73.0":"2022-10-19T16:43:03.711Z","11.73.1":"2022-10-19T18:09:37.507Z","11.74.0":"2022-10-25T22:43:39.965Z","11.75.0":"2022-11-02T17:44:53.821Z","11.75.1":"2022-11-03T00:26:47.369Z","10.19.1":"2022-11-03T17:46:55.573Z","11.76.0":"2022-11-05T01:08:30.034Z","11.76.1":"2022-11-06T03:37:58.099Z","11.77.0":"2022-11-09T01:28:01.158Z","11.77.1":"2022-11-16T01:19:22.874Z","11.78.0":"2022-12-16T19:52:04.478Z","11.79.0":"2023-01-13T19:48:58.943Z","11.80.0":"2023-01-25T19:47:17.161Z","11.81.0":"2023-02-01T17:22:20.471Z","12.0.0-alpha.6":"2023-03-30T01:45:14.356Z","12.0.0-alpha.7":"2023-03-31T16:55:21.616Z","12.0.0-alpha.8":"2023-04-06T19:54:44.532Z","12.0.0-alpha.9":"2023-04-10T21:04:08.382Z","12.0.0-alpha.10":"2023-05-01T20:50:19.496Z","12.0.0-alpha.11":"2023-05-30T21:21:41.766Z","11.87.0":"2023-05-31T15:50:24.446Z","12.0.0-alpha.12":"2023-06-01T16:29:22.159Z","12.0.0-alpha.13":"2023-06-06T21:28:26.809Z","12.0.0-alpha.14":"2023-06-06T22:34:54.383Z","12.0.0-alpha.15":"2023-06-07T15:32:27.796Z","11.87.1":"2023-06-15T19:24:12.993Z","12.0.0-alpha.16":"2023-06-26T15:12:06.875Z","12.0.0-alpha.17":"2023-06-30T15:27:13.671Z","12.0.0-alpha.18":"2023-07-05T18:43:29.934Z","12.0.0-alpha.19":"2023-07-06T02:31:08.727Z","12.0.0-alpha.20":"2023-07-07T19:16:13.036Z","11.88.0":"2023-08-10T03:50:38.985Z","11.88.1":"2023-08-10T18:19:36.844Z"},"license":"MIT","description":"Analytics, CMS, and Settings module for Flagship","maintainers":[{"email":"nathan.sankbeil@brandingbrand.com","name":"nathan-sankbeil"},{"email":"nick.burkhart@brandingbrand.com","name":"nickburkhartbb"},{"email":"travis+bbtravis@brandingbrand.com","name":"bbtravis"},{"email":"deema.abdallah@brandingbrand.com","name":"deemaabdallah"},{"email":"mikhail@brandingbrand.com","name":"msiauko"},{"email":"jason.mosley@brandingbrand.com","name":"jasonmosleybb"},{"email":"nick@brandingbrand.com","name":"nickbb"},{"email":"aj@brandingbrand.com","name":"notajvento"},{"email":"andrew.harrison@brandingbrand.com","name":"xero"},{"email":"stefan.neamtu@brandingbrand.com","name":"varzamanbb"},{"email":"ops@brandingbrand.com","name":"bb_jenkins"},{"email":"crherman7@gmail.com","name":"crherman7"},{"email":"johnmichael.w.riley@gmail.com","name":"jmwr"},{"email":"travis@brandingbrand.com","name":"bbtravisreadonly"}],"readme":"# FSEngage\n\nFSEngage is Flagship's Engagement package. It Analytics library supports integrations for Google\nAnalytics, Leanplum, and Adobe Cloud Marketing. Its CMS library supports our proprietary CMS and soon\nwill support Demandware.\n\n- [Analytics](#analytics)\n  - [Analytics Providers](#analytics-providers)\n  - [Analytics Providers Configuration](#analytics-configurations)\n    - [Analytics Provider Configuration](#AnalyticsProviderConfiguration)\n    - [Leanplum](#LeanplumProviderConfiguration)\n    - [Adobe Marketing Congfiguration](#AdobeMarketingCloudWebProviderConfiguration)\n    - [Google Analytics](#GoogleAnalyticsProviderConfiguration)\n  - [Analytics Constructors](#analytics-constructors)\n  - [Analytics Tracking](#tracking-functions)\n    - [Ecommerce Function Signatures](#ecommerce)\n    - [Enhanced Ecommerce Function Signatures](#enhanced-ecommerce)\n    - [App Lifecycle Function Signatures](#app-lifecycle)\n    - [Full List of Property Parameters for Tracking](#parameters)\n    - [Sending Custom Fields to Google Analytics](#sending-custom-fields-to-google-analytics)\n- [CMS](#cms)\n  - [CMS Providers](#cms-providers)\n    - [Core](#core)\n    - [Demandware](#demandware)\n  - [CMS API](#cms-api)\n    - [CMS Configurations](#cms-configurations)\n    - [CMS Constructors](#cms-constructors)\n    - [Functionality](#cms-constructors)\n- [Tests](#tests)\n\n## Analytics\n\nThe analytics library includes convenient integrations for Google Analytics, Leanplum, and Adobe\nMarketing cloud. Getting started with our analytics library is as easy as configuring your analytics\nproviders and passing these configs into the Analytics constructor. Then you will be\nable to import your analytics object into your app's components for easy tracking of ecommerce,\nenhanced ecommerce, and lifecycle events.\n\n## Analytics Providers\n\n### Leanplum\n\nLeanplum is only supported in native environments.\n\n### Adobe Marketing Cloud\n\nAdobe is only supported in native environments at the moment. The plan is to also provide support\nfor web environment down the road.\n\n**Warning**: Adobe native support has not been fully tested yet due to limited access to their\nplatform at the time of development.\n\n#### # iOS\n\nIn order to run Adobe native code wrapper, the below dependencies would need to be linked in the iOS\nproject.\n\n```bash\nSystemConfiguration.framework\nlibsqlite3.0\n```\n\nAlso, you will need to include in your bundle the configuration file `ADBMobileConfig.json` provided\nby Adobe Marketing Cloud.\n\nFor more information please go [here](https://marketing.adobe.com/resources/help/en_US/mobile/ios/dev_qs.html).\n\n## API - Analytics\n\n### Analytics Configurations\n\nBefore generating your analytics object, you must first successfully configure your providers according\nto the following configuration signatures.\n\n#### # AnalyticsProviderConfiguration\n\n| Property       |  Type  | Required |\n| -------------- | :----: | :------: |\n| userAgent      | string | **yes**  |\n| osType         | string | **yes**  |\n| osVersion      | string | **yes**  |\n| appName        | string | **yes**  |\n| appId          | string | **yes**  |\n| appVersion     | string | **yes**  |\n| appInstallerId | string |    no    |\n\n#### # AdobeMarketingCloudWebProviderConfiguration\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| clientId      | string | **yes**  |\n| clientSecret  | string | **yes**  |\n| reportSuiteId | string | **yes**  |\n\n**Note**: This configuration just applies for web environments. For native environment\nconfiguration please see [here](https://github.com/brandingbrand/flagship/tree/master/packages/fsengage#-ios).\n\n#### # GoogleAnalyticsProviderConfiguration\n\n| Property     |  Type  | Required |\n| ------------ | :----: | :------: |\n| trackerId    | string | **yes**  |\n| clientId     | string | **yes**  |\n| trackerName  | string |    no    |\n| cookieDomain | string |    no    |\n\n#### # LeanplumProviderConfiguration\n\n| Property              |  Type  | Required |\n| --------------------- | :----: | :------: |\n| appId                 | string | **yes**  |\n| key                   | string | **yes**  |\n| monetizationEventName | string |    no    |\n\n### Analytics Constructors\n\nOnce you have configured your providers, you will want to pass them to the Analytics constructor in\norder to output your own Analytics instance. Below you will find examples. The first user has chosen\nto Google Analytics alone, the second has chosen to use all three providers.\n\n```javascript\nconst AnalyticsProviderConfiguration = {\n  userAgent: DeviceInfo.getUserAgent(),\n  osType: Platform.OS,\n  osVersion: (Platform.Version && Platform.Version.toString()) || '',\n  appName: DeviceInfo.getApplicationName(),\n  appId: DeviceInfo.getBundleId(),\n  appVersion: version,\n};\n\nconst googleAnalyticsConfiguration = {\n  trackerId: projectEnv.googleAnalytics[Platform.OS],\n  clientId: DeviceInfo.getUniqueID(),\n};\n\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\n\nconst analytics = new Analytics([google]);\n```\n\n```javascript\nconst adobe = new AdobeMarketingCloudProvider(\n  AnalyticsProviderConfiguration,\n  AdobeMarketingCloudWebProviderConfiguration\n);\nconst google = new GoogleAnalyticsProvider(\n  AnalyticsProviderConfiguration,\n  GoogleAnalyticsProviderConfiguration\n);\nconst leanplum = new LeanplumProvider(\n  AnalyticsProviderConfiguration,\n  LeanplumProviderConfiguration\n);\n\nconst analytics = new Analytics([\n  adobe,\n  google,\n  leanplum\n]): Analytics;\n\n```\n\n### Tracking Functions\n\nOnce you have successfully configured your Analytics provider, you can import it into your components\nand begin tracking users' interactions with your app or site. For example, on a Product Detail Page,\nyou might want to add a click tracker to your 'Add To Cart' button. It's as simple as adding the\nfollowing code to your success handler (assuming you only want to tracks successful adds):\n\n```javascript\nAnalytics.click.generic('Add to Bag', {\n  identifier: variantId,\n  name: 'PDP',\n});\n```\n\nOr maybe you want to track a screenview of a product page. In that case you would want to add\nsomething like this into your render function:\n\n```javascript\nAnalytics.screenview('ProductDetail', {\n  url: 'www.example.com/products/123',\n});\n```\n\nThe full list of function signatures for ecommerce, enhanced ecommerce, and lifecycle events can be\nfound below. Following these are complete lists of all mandatory and optional properties for each\nfunction.\n\n#### # Ecommerce\n\n```javascript\nanalytics.contact.call(component: React.Component | string, properties: ContactCall): void;\n```\n\n```javascript\nanalytics.contact.email(component: React.Component | string, properties: ContactEmail): void;\n```\n\n```javascript\nanalytics.click.generic(component: React.Component | string, properties: ClickGeneric): void;\n```\n\n```javascript\nanalytics.location.directions(\n  component: React.Component | string,\n  properties: LocationDirections\n): void;\n```\n\n```javascript\nanalytics.search.generic(component: React.Component | string, properties: SearchGeneric): void;\n```\n\n```javascript\nanalytics.impression.generic(\n  component: React.Component | string,\n  properties: ImpressionGeneric\n): void;\n```\n\n```javascript\nanalytics.screenview(component: React.Component | string, properties: Screenview): void;\n```\n\n#### # Enhanced Ecommerce\n\n**IMPORTANT**: Enhanced hits are not sent on their own; instead, they piggy-back on standard\nhits such as impressions and screenviews. As such, you must invoke a screenview or similar\nhit after using any of the following methods in order for the data to be delivered.\n\n```javascript\nanalytics.impression.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.impression.product(\n  component: React.Component | string,\n  properties: ImpressionProduct\n): void;\n```\n\n```javascript\nanalytics.click.promotion(component: React.Component | string, properties: Promotion): void;\n```\n\n```javascript\nanalytics.click.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.detail.product(\n  component: React.Component | string,\n  properties: Product,\n  action: ProductAction?\n): void;\n```\n\n```javascript\nanalytics.add.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.remove.product(component: React.Component | string, properties: Product): void;\n```\n\n```javascript\nanalytics.checkout(\n  component: React.Component | string,\n  products: Product[],\n  action: CheckoutAction\n): void;\n```\n\n```javascript\nanalytics.checkoutOption(component: React.Component | string, action: CheckoutAction): void;\n```\n\n```javascript\nanalytics.purchase(\n  component: React.Component | string,\n  products: Product[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.partial(\n  component: React.Component | string,\n  products: RefundProduct[],\n  action: TransactionAction\n): void;\n```\n\n```javascript\nanalytics.refund.all(component: React.Component | string, action: TransactionAction): void;\n```\n\n#### # App Lifecycles\n\n```javascript\nanalytics.lifecycle.active(): void;\n```\n\n```javascript\nanalytics.lifecycle.background(): void;\n```\n\n```javascript\nanalytics.lifecycle.close(): void;\n```\n\n```javascript\nanalytics.lifecycle.create(): void;\n```\n\n```javascript\nanalytics.lifecycle.inactive(): void;\n```\n\n```javascript\nanalytics.lifecycle.start(): void;\n```\n\n```javascript\nanalytics.lifecycle.suspend(): void;\n```\n\n### Parameters\n\n#### # ClickGeneric\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| name          | string | **yes\\*** |\n| index         | number |    no     |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **name** must be set.\n\n#### # ContactCall\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| number        | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n#### # ContactEmail\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| to            | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n#### # ImpressionGeneric\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| name          | string | **yes\\*** |\n| index         | number |    no     |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **name** must be set.\n\n#### # ImpressionProduct\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| identifier    | string | **yes**  |\n| name          | string | **yes**  |\n| brand         | string |    no    |\n| category      | string |    no    |\n| list          | string |    no    |\n| variant       | string |    no    |\n| price         | number |    no    |\n| index         | number |    no    |\n| gaQueryParams | object |    no    |\n\n#### # LocationDirections\n\n| Property      |  Type  | Required  |\n| ------------- | :----: | :-------: |\n| identifier    | string | **yes\\*** |\n| address       | string | **yes\\*** |\n| gaQueryParams | object |    no     |\n\n\\* Either **identifier** or **address** must be set.\n\n#### # Product\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| name          |  string  | **yes**  |\n| brand         |  string  |    no    |\n| category      |  string  |    no    |\n| variant       |  string  |    no    |\n| coupons       | string[] |    no    |\n| price         |  string  |    no    |\n| quantity      |  number  |    no    |\n| index         |  number  |    no    |\n| gaQueryParams |  object  |    no    |\n\n#### # Promotion\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| identifier    | string | **yes**  |\n| name          | string | **yes**  |\n| creative      | string |    no    |\n| slot          | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # RefundProduct\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| quantity      |  number  | **yes**  |\n| price         |  string  |    no    |\n| coupons       | string[] |    no    |\n| gaQueryParams |  object  |    no    |\n\n#### # SearchGeneric\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| term          | string | **yes**  |\n| count         | number |    no    |\n| gaQueryParams | object |    no    |\n\n#### # Screenview\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| url           | string | **yes**  |\n| gaQueryParams | object |    no    |\n\n### Actions\n\n#### # ProductAction\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| list          | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # CheckoutAction\n\n| Property      |  Type  | Required |\n| ------------- | :----: | :------: |\n| step          | number |    no    |\n| option        | string |    no    |\n| gaQueryParams | object |    no    |\n\n#### # TransactionAction\n\n| Property      |   Type   | Required |\n| ------------- | :------: | :------: |\n| identifier    |  string  | **yes**  |\n| affiliation   |  string  |    no    |\n| revenue       |  string  |    no    |\n| tax           |  string  |    no    |\n| shippingCost  |  string  |    no    |\n| coupons       | string[] |    no    |\n| gaQueryParams |  object  |    no    |\n\n### Sending Custom Fields to Google Analytics\n\nThe Google Analytics provider has support for specifying custom fields by way of setting\n`gaQueryParams` in the payload. A full list of officially supported GA fields can be found\n[here](https://developers.google.com/analytics/devguides/collection/analyticsjs/field-reference).\n\nExample usage:\n\n```javascript\nanalytics.impression.product({\n  component: 'ProductComponent',\n  properties: {\n    identifier: 'abc123',\n    name: 'Large Blue Pants',\n    gaQueryParams: {\n      tcc: 'SALE45',\n    },\n  },\n});\n```\n\n## CMS\n\n## CMS Providers\n\n### Core\n\nBranding Brand's content management system is supported with some targets limitations at the moment.\nThe targets currently supported are:\n\n- City\n- Country\n- Date\n- Postal Code\n- Region\n- State\n- Time of Day\n- Time Zone\n\n### Demandware\n\nDemandware's content management system support is on the roadmap, but it is still on the exploration\nstage. A strategy for how to manage slots' content need to be set, since they are coming from the\nData API, instead of the Shop API.\n\n## CMS API\n\n### CMS Configurations\n\n#### # ContentManagementSystemProviderConfiguration\n\n| Property    |  Type  | Required |\n| ----------- | :----: | :------: |\n| propertyId  | string | **yes**  |\n| environment | number | **yes**  |\n\n### CMS Constructors\n\n```javascript\nconst core = new CoreContentManagementSystemProvider(\n  configuration: ContentManagementSystemProviderConfiguration\n);\nconst cms = new ContentManagementSystem(provider: core);\n```\n\n### Functionality\n\n```javascript\ncms.shouldFallbackToGeoIP = true;\n```\n\n```javascript\ncms.shouldPromptForGelolocationPermission = true;\n```\n\n```javascript\ncms.contentForSlot(group: string, slot: string, identifier?: string): Promise<{}>;\n```\n\nGet a list of identifiers of the slot\n\n```javascript\ncms.identifiersForSlot(group: string, slot: string): Promise<string[]>;\n```\n\n## Tests\n\n### Native\n\nIn order to run native integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run ios || npm run android\n```\n\n### Web\n\nIn order to run web integrations tests, please execute the following commands:\n\n```bash\n1. npm install\n```\n\n```bash\n2. npm run init\n```\n\n```bash\n3. npm run web\n```\n","readmeFilename":"README.md"}